<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::GridProjection&lt; PointNT &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1_grid_projection.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#nested-classes">类</a> &#124;
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pro-methods">Protected 成员函数</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1_grid_projection-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::GridProjection&lt; PointNT &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p><a class="el" href="class_grid.html">Grid</a> projection surface reconstruction method.  
 <a href="classpcl_1_1_grid_projection.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="grid__projection_8h_source.html">grid_projection.h</a>&gt;</code></p>
<div class="dynheader">
类 pcl::GridProjection&lt; PointNT &gt; 继承关系图:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classpcl_1_1_grid_projection.png" usemap="#pcl::GridProjection_3C_20PointNT_20_3E_map" alt=""/>
  <map id="pcl::GridProjection_3C_20PointNT_20_3E_map" name="pcl::GridProjection_3C_20PointNT_20_3E_map">
<area href="classpcl_1_1_surface_reconstruction.html" alt="pcl::SurfaceReconstruction&lt; PointNT &gt;" shape="rect" coords="0,112,232,136"/>
<area href="classpcl_1_1_p_c_l_surface_base.html" title="Pure abstract class. All types of meshing/reconstruction algorithms in libpcl_surface must inherit fr..." alt="pcl::PCLSurfaceBase&lt; PointInT &gt;" shape="rect" coords="0,56,232,80"/>
<area href="classpcl_1_1_p_c_l_base.html" alt="pcl::PCLBase&lt; PointInT &gt;" shape="rect" coords="0,0,232,24"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
类</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_grid_projection_1_1_leaf.html">Leaf</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data leaf.  <a href="structpcl_1_1_grid_projection_1_1_leaf.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:a3911927c375521805982070910d9cc21"><td class="memItemLeft" align="right" valign="top"><a id="a3911927c375521805982070910d9cc21"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_grid_projection.html">GridProjection</a>&lt; PointNT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a3911927c375521805982070910d9cc21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96ab14f919129aea2466ca5fd1013a21"><td class="memItemLeft" align="right" valign="top"><a id="a96ab14f919129aea2466ca5fd1013a21"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_grid_projection.html">GridProjection</a>&lt; PointNT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a96ab14f919129aea2466ca5fd1013a21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a777cd7621a8ebf35147fa29c1c18641a"><td class="memItemLeft" align="right" valign="top"><a id="a777cd7621a8ebf35147fa29c1c18641a"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointNT &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:a777cd7621a8ebf35147fa29c1c18641a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeeedb440fd215c97143a9fa6fa5ccf2d"><td class="memItemLeft" align="right" valign="top"><a id="aeeedb440fd215c97143a9fa6fa5ccf2d"></a>
typedef <a class="el" href="classpcl_1_1_kd_tree.html">pcl::KdTree</a>&lt; PointNT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTree</b></td></tr>
<tr class="separator:aeeedb440fd215c97143a9fa6fa5ccf2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1430ad128176bbf6521bcbdd64599b78"><td class="memItemLeft" align="right" valign="top"><a id="a1430ad128176bbf6521bcbdd64599b78"></a>
typedef <a class="el" href="classpcl_1_1_kd_tree.html">pcl::KdTree</a>&lt; PointNT &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreePtr</b></td></tr>
<tr class="separator:a1430ad128176bbf6521bcbdd64599b78"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf2c35c358d768516c366bdb16a1c54a"><td class="memItemLeft" align="right" valign="top"><a id="acf2c35c358d768516c366bdb16a1c54a"></a>
typedef boost::unordered_map&lt; int, <a class="el" href="structpcl_1_1_grid_projection_1_1_leaf.html">Leaf</a>, boost::hash&lt; int &gt;, std::equal_to&lt; int &gt;, Eigen::aligned_allocator&lt; int &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>HashMap</b></td></tr>
<tr class="separator:acf2c35c358d768516c366bdb16a1c54a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_surface_reconstruction"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_surface_reconstruction')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_surface_reconstruction.html">pcl::SurfaceReconstruction&lt; PointNT &gt;</a></td></tr>
<tr class="memitem:a82a72c302749a05be8374d7e5c3edd2b inherit pub_types_classpcl_1_1_surface_reconstruction"><td class="memItemLeft" align="right" valign="top"><a id="a82a72c302749a05be8374d7e5c3edd2b"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_surface_reconstruction.html">SurfaceReconstruction</a>&lt; PointNT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a82a72c302749a05be8374d7e5c3edd2b inherit pub_types_classpcl_1_1_surface_reconstruction"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a346e458609b16ee003bd96881dbc8c8c inherit pub_types_classpcl_1_1_surface_reconstruction"><td class="memItemLeft" align="right" valign="top"><a id="a346e458609b16ee003bd96881dbc8c8c"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_surface_reconstruction.html">SurfaceReconstruction</a>&lt; PointNT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a346e458609b16ee003bd96881dbc8c8c inherit pub_types_classpcl_1_1_surface_reconstruction"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_p_c_l_surface_base"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_p_c_l_surface_base')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_p_c_l_surface_base.html">pcl::PCLSurfaceBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:a2f84799184d18b1a1cd975b1150141be inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="a2f84799184d18b1a1cd975b1150141be"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_p_c_l_surface_base.html">PCLSurfaceBase</a>&lt; PointInT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a2f84799184d18b1a1cd975b1150141be inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36f91263ab6849f650394555962009b9 inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="a36f91263ab6849f650394555962009b9"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_p_c_l_surface_base.html">PCLSurfaceBase</a>&lt; PointInT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a36f91263ab6849f650394555962009b9 inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af69dc51274aeb35ad9d2f5a7c2bc9b13 inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="af69dc51274aeb35ad9d2f5a7c2bc9b13"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTree</b></td></tr>
<tr class="separator:af69dc51274aeb35ad9d2f5a7c2bc9b13 inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d522cbb4c45e2d477244fffd4b6e224 inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="a5d522cbb4c45e2d477244fffd4b6e224"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; PointInT &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreePtr</b></td></tr>
<tr class="separator:a5d522cbb4c45e2d477244fffd4b6e224 inherit pub_types_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae2f6f6863a73337858b7a7a054eaae4f"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloud</b></td></tr>
<tr class="separator:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ab84dd662cda89edb882fe5307b2136ea"></a>
typedef PointCloud::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ac8326513fad0680b6993e2f1a79a6af4"></a>
typedef PointCloud::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudConstPtr</b></td></tr>
<tr class="separator:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae51eae0c7b3e0b7178f4894dff90660a"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesPtr</b></td></tr>
<tr class="separator:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a51771056fb4ab8c448a11157acbe2ee0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> const &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesConstPtr</b></td></tr>
<tr class="separator:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:a79cb25cd43c17040722912dbffa5ca22"><td class="memItemLeft" align="right" valign="top"><a id="a79cb25cd43c17040722912dbffa5ca22"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a79cb25cd43c17040722912dbffa5ca22">GridProjection</a> ()</td></tr>
<tr class="memdesc:a79cb25cd43c17040722912dbffa5ca22"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <br /></td></tr>
<tr class="separator:a79cb25cd43c17040722912dbffa5ca22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb6b9a0bf64fe78bbd8c8b16b95735fa"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#acb6b9a0bf64fe78bbd8c8b16b95735fa">GridProjection</a> (double in_resolution)</td></tr>
<tr class="memdesc:acb6b9a0bf64fe78bbd8c8b16b95735fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor.  <a href="classpcl_1_1_grid_projection.html#acb6b9a0bf64fe78bbd8c8b16b95735fa">更多...</a><br /></td></tr>
<tr class="separator:acb6b9a0bf64fe78bbd8c8b16b95735fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64f6ad98a1afff0c76ff557c68ae7b29"><td class="memItemLeft" align="right" valign="top"><a id="a64f6ad98a1afff0c76ff557c68ae7b29"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a64f6ad98a1afff0c76ff557c68ae7b29">~GridProjection</a> ()</td></tr>
<tr class="memdesc:a64f6ad98a1afff0c76ff557c68ae7b29"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:a64f6ad98a1afff0c76ff557c68ae7b29"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8ccfe1a2c8d66ca9a126d33096d2496"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#af8ccfe1a2c8d66ca9a126d33096d2496">setResolution</a> (double resolution)</td></tr>
<tr class="memdesc:af8ccfe1a2c8d66ca9a126d33096d2496"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the size of the grid cell  <a href="classpcl_1_1_grid_projection.html#af8ccfe1a2c8d66ca9a126d33096d2496">更多...</a><br /></td></tr>
<tr class="separator:af8ccfe1a2c8d66ca9a126d33096d2496"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae28f4d83ee50a5ad6267d7936f55a09d"><td class="memItemLeft" align="right" valign="top"><a id="ae28f4d83ee50a5ad6267d7936f55a09d"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><b>getResolution</b> () const</td></tr>
<tr class="separator:ae28f4d83ee50a5ad6267d7936f55a09d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7661621ee4c96b46571cc5778b9b48cf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a7661621ee4c96b46571cc5778b9b48cf">setPaddingSize</a> (int padding_size)</td></tr>
<tr class="memdesc:a7661621ee4c96b46571cc5778b9b48cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">When averaging the vectors, we find the union of all the input data points within the padding area,and do a weighted average. Say if the padding size is 1, when we process cell (x,y,z), we will find union of input data points from (x-1) to (x+1), (y-1) to (y+1), (z-1) to (z+1)(in total, 27 cells). In this way, even the cells itself doesnt contain any data points, we will stil process it because there are data points in the padding area. This can help us fix holes which is smaller than the padding size.  <a href="classpcl_1_1_grid_projection.html#a7661621ee4c96b46571cc5778b9b48cf">更多...</a><br /></td></tr>
<tr class="separator:a7661621ee4c96b46571cc5778b9b48cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb565f51df04964c3b49dbd257d66d3d"><td class="memItemLeft" align="right" valign="top"><a id="adb565f51df04964c3b49dbd257d66d3d"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>getPaddingSize</b> () const</td></tr>
<tr class="separator:adb565f51df04964c3b49dbd257d66d3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab668b2eefe9c9136c06956ad312e6704"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#ab668b2eefe9c9136c06956ad312e6704">setNearestNeighborNum</a> (int k)</td></tr>
<tr class="memdesc:ab668b2eefe9c9136c06956ad312e6704"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set this only when using the k nearest neighbors search instead of finding the point union  <a href="classpcl_1_1_grid_projection.html#ab668b2eefe9c9136c06956ad312e6704">更多...</a><br /></td></tr>
<tr class="separator:ab668b2eefe9c9136c06956ad312e6704"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9887d299ea2be516a1216cb7843a1bef"><td class="memItemLeft" align="right" valign="top"><a id="a9887d299ea2be516a1216cb7843a1bef"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>getNearestNeighborNum</b> () const</td></tr>
<tr class="separator:a9887d299ea2be516a1216cb7843a1bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86f788e943e8660d1806688f8a56aec3"><td class="memItemLeft" align="right" valign="top"><a id="a86f788e943e8660d1806688f8a56aec3"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a86f788e943e8660d1806688f8a56aec3">setMaxBinarySearchLevel</a> (int max_binary_search_level)</td></tr>
<tr class="memdesc:a86f788e943e8660d1806688f8a56aec3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binary search is used in projection. given a point x, we find another point which is 3*cell_size_ far away from x. Then we do a binary search between these two points to find where the projected point should be. <br /></td></tr>
<tr class="separator:a86f788e943e8660d1806688f8a56aec3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c221e7f97944896dc9003da3303c4f3"><td class="memItemLeft" align="right" valign="top"><a id="a8c221e7f97944896dc9003da3303c4f3"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxBinarySearchLevel</b> () const</td></tr>
<tr class="separator:a8c221e7f97944896dc9003da3303c4f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a244e5fdc0993524900d4512c1eb7c60b"><td class="memItemLeft" align="right" valign="top"><a id="a244e5fdc0993524900d4512c1eb7c60b"></a>
const HashMap &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>getCellHashMap</b> () const</td></tr>
<tr class="separator:a244e5fdc0993524900d4512c1eb7c60b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41777645db865cd6155d3714fc8c7380"><td class="memItemLeft" align="right" valign="top"><a id="a41777645db865cd6155d3714fc8c7380"></a>
const std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>getVectorAtDataPoint</b> () const</td></tr>
<tr class="separator:a41777645db865cd6155d3714fc8c7380"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa89bb70feecd87f4c8440ecec5426ccb"><td class="memItemLeft" align="right" valign="top"><a id="aa89bb70feecd87f4c8440ecec5426ccb"></a>
const std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>getSurface</b> () const</td></tr>
<tr class="separator:aa89bb70feecd87f4c8440ecec5426ccb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_surface_reconstruction"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_surface_reconstruction')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_surface_reconstruction.html">pcl::SurfaceReconstruction&lt; PointNT &gt;</a></td></tr>
<tr class="memitem:a62586eb3779c4f30358cbc5610f45704 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memItemLeft" align="right" valign="top"><a id="a62586eb3779c4f30358cbc5610f45704"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_surface_reconstruction.html#a62586eb3779c4f30358cbc5610f45704">SurfaceReconstruction</a> ()</td></tr>
<tr class="memdesc:a62586eb3779c4f30358cbc5610f45704 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <br /></td></tr>
<tr class="separator:a62586eb3779c4f30358cbc5610f45704 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ff44d59d17234e00a4c2fc94af0a79f inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memItemLeft" align="right" valign="top"><a id="a5ff44d59d17234e00a4c2fc94af0a79f"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_surface_reconstruction.html#a5ff44d59d17234e00a4c2fc94af0a79f">~SurfaceReconstruction</a> ()</td></tr>
<tr class="memdesc:a5ff44d59d17234e00a4c2fc94af0a79f inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:a5ff44d59d17234e00a4c2fc94af0a79f inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0186afbd6d85006cc7165a59273a788 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_surface_reconstruction.html#af0186afbd6d85006cc7165a59273a788">reconstruct</a> (<a class="el" href="structpcl_1_1_polygon_mesh.html">pcl::PolygonMesh</a> &amp;output)</td></tr>
<tr class="memdesc:af0186afbd6d85006cc7165a59273a788 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base method for surface reconstruction for all points given in &lt;setInputCloud (), setIndices ()&gt;  <a href="classpcl_1_1_surface_reconstruction.html#af0186afbd6d85006cc7165a59273a788">更多...</a><br /></td></tr>
<tr class="separator:af0186afbd6d85006cc7165a59273a788 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaec1dc0c87b4f8bacaa46ef0899a69f7 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_surface_reconstruction.html#aaec1dc0c87b4f8bacaa46ef0899a69f7">reconstruct</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointNT &gt; &amp;points, std::vector&lt; <a class="el" href="structpcl_1_1_vertices.html">pcl::Vertices</a> &gt; &amp;polygons)</td></tr>
<tr class="memdesc:aaec1dc0c87b4f8bacaa46ef0899a69f7 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base method for surface reconstruction for all points given in &lt;setInputCloud (), setIndices ()&gt;  <a href="classpcl_1_1_surface_reconstruction.html#aaec1dc0c87b4f8bacaa46ef0899a69f7">更多...</a><br /></td></tr>
<tr class="separator:aaec1dc0c87b4f8bacaa46ef0899a69f7 inherit pub_methods_classpcl_1_1_surface_reconstruction"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_p_c_l_surface_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_p_c_l_surface_base')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_surface_base.html">pcl::PCLSurfaceBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:aa4fba20611b3e995b9cc07dac528e4c3 inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="aa4fba20611b3e995b9cc07dac528e4c3"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_surface_base.html#aa4fba20611b3e995b9cc07dac528e4c3">PCLSurfaceBase</a> ()</td></tr>
<tr class="memdesc:aa4fba20611b3e995b9cc07dac528e4c3 inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:aa4fba20611b3e995b9cc07dac528e4c3 inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a264840d7b5cf8d1e7e6b3c96e9920c9f inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="a264840d7b5cf8d1e7e6b3c96e9920c9f"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_surface_base.html#a264840d7b5cf8d1e7e6b3c96e9920c9f">~PCLSurfaceBase</a> ()</td></tr>
<tr class="memdesc:a264840d7b5cf8d1e7e6b3c96e9920c9f inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty destructor <br /></td></tr>
<tr class="separator:a264840d7b5cf8d1e7e6b3c96e9920c9f inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af599c9767a18649344ff21d3976f1779 inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_surface_base.html#af599c9767a18649344ff21d3976f1779">setSearchMethod</a> (const KdTreePtr &amp;tree)</td></tr>
<tr class="memdesc:af599c9767a18649344ff21d3976f1779 inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide an optional pointer to a search object.  <a href="classpcl_1_1_p_c_l_surface_base.html#af599c9767a18649344ff21d3976f1779">更多...</a><br /></td></tr>
<tr class="separator:af599c9767a18649344ff21d3976f1779 inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2249d44038e0869bbf60e486ab3826af inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="a2249d44038e0869bbf60e486ab3826af"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_surface_base.html#a2249d44038e0869bbf60e486ab3826af">getSearchMethod</a> ()</td></tr>
<tr class="memdesc:a2249d44038e0869bbf60e486ab3826af inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the search method used. <br /></td></tr>
<tr class="separator:a2249d44038e0869bbf60e486ab3826af inherit pub_methods_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="af4fbc5eb005057f8a0fc6d60bde595df"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af4fbc5eb005057f8a0fc6d60bde595df">PCLBase</a> ()</td></tr>
<tr class="memdesc:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a7a6dd7a91275d7737cf1b18005b47244"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a7a6dd7a91275d7737cf1b18005b47244">PCLBase</a> (const <a class="el" href="classpcl_1_1_p_c_l_base.html">PCLBase</a> &amp;base)</td></tr>
<tr class="memdesc:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <br /></td></tr>
<tr class="separator:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ad5d6846e98e59c37dcc3dc9958d53966"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ad5d6846e98e59c37dcc3dc9958d53966">~PCLBase</a> ()</td></tr>
<tr class="memdesc:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (const PointCloudConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input dataset  <a href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">更多...</a><br /></td></tr>
<tr class="separator:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a8cd745c4f7a792212f4fc3720b9d46ea"></a>
PointCloudConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a8cd745c4f7a792212f4fc3720b9d46ea">getInputCloud</a> () const</td></tr>
<tr class="memdesc:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset. <br /></td></tr>
<tr class="separator:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (const IndicesPtr &amp;indices)</td></tr>
<tr class="memdesc:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">更多...</a><br /></td></tr>
<tr class="separator:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">setIndices</a> (const IndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">更多...</a><br /></td></tr>
<tr class="separator:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">setIndices</a> (const PointIndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">更多...</a><br /></td></tr>
<tr class="separator:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">setIndices</a> (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)</td></tr>
<tr class="memdesc:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the indices for the points laying within an interest region of the point cloud.  <a href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">更多...</a><br /></td></tr>
<tr class="separator:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a058753dd4de73d3d0062fe2e452fba3c"></a>
IndicesPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a058753dd4de73d3d0062fe2e452fba3c">getIndices</a> ()</td></tr>
<tr class="memdesc:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="acae187b37230758959572ceb1e6e2045"></a>
IndicesConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acae187b37230758959572ceb1e6e2045">getIndices</a> () const</td></tr>
<tr class="memdesc:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">const PointInT &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">operator[]</a> (size_t pos) const</td></tr>
<tr class="memdesc:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override PointCloud operator[] to shorten code  <a href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">更多...</a><br /></td></tr>
<tr class="separator:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected 成员函数</h2></td></tr>
<tr class="memitem:a3a200448054e67bd9f6117ebf81a1056"><td class="memItemLeft" align="right" valign="top"><a id="a3a200448054e67bd9f6117ebf81a1056"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a3a200448054e67bd9f6117ebf81a1056">getBoundingBox</a> ()</td></tr>
<tr class="memdesc:a3a200448054e67bd9f6117ebf81a1056"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the bounding box for the input data points, also calculating the cell size, and the gaussian scale factor <br /></td></tr>
<tr class="separator:a3a200448054e67bd9f6117ebf81a1056"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f79063799f9c6f47e8b8c7a61bae696"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a0f79063799f9c6f47e8b8c7a61bae696">reconstructPolygons</a> (std::vector&lt; <a class="el" href="structpcl_1_1_vertices.html">pcl::Vertices</a> &gt; &amp;polygons)</td></tr>
<tr class="memdesc:a0f79063799f9c6f47e8b8c7a61bae696"><td class="mdescLeft">&#160;</td><td class="mdescRight">The actual surface reconstruction method.  <a href="classpcl_1_1_grid_projection.html#a0f79063799f9c6f47e8b8c7a61bae696">更多...</a><br /></td></tr>
<tr class="separator:a0f79063799f9c6f47e8b8c7a61bae696"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0022be10a74f9928ca95c566a0cb0de5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a0022be10a74f9928ca95c566a0cb0de5">performReconstruction</a> (<a class="el" href="structpcl_1_1_polygon_mesh.html">pcl::PolygonMesh</a> &amp;output)</td></tr>
<tr class="memdesc:a0022be10a74f9928ca95c566a0cb0de5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create the surface.  <a href="classpcl_1_1_grid_projection.html#a0022be10a74f9928ca95c566a0cb0de5">更多...</a><br /></td></tr>
<tr class="separator:a0022be10a74f9928ca95c566a0cb0de5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8110323bbd4c3b7af31d308246ebeb1a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a8110323bbd4c3b7af31d308246ebeb1a">performReconstruction</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointNT &gt; &amp;points, std::vector&lt; <a class="el" href="structpcl_1_1_vertices.html">pcl::Vertices</a> &gt; &amp;polygons)</td></tr>
<tr class="memdesc:a8110323bbd4c3b7af31d308246ebeb1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create the surface.  <a href="classpcl_1_1_grid_projection.html#a8110323bbd4c3b7af31d308246ebeb1a">更多...</a><br /></td></tr>
<tr class="separator:a8110323bbd4c3b7af31d308246ebeb1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5411849e36c65f0f841290f9aa9fb562"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a5411849e36c65f0f841290f9aa9fb562">scaleInputDataPoint</a> (double scale_factor)</td></tr>
<tr class="memdesc:a5411849e36c65f0f841290f9aa9fb562"><td class="mdescLeft">&#160;</td><td class="mdescRight">When the input data points don't fill into the 1*1*1 box, scale them so that they can be filled in the unit box. Otherwise, it will be some drawing problem when doing visulization  <a href="classpcl_1_1_grid_projection.html#a5411849e36c65f0f841290f9aa9fb562">更多...</a><br /></td></tr>
<tr class="separator:a5411849e36c65f0f841290f9aa9fb562"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3dc6098c925df8dd7d769cdd9a48d388"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a3dc6098c925df8dd7d769cdd9a48d388">getCellIndex</a> (const Eigen::Vector4f &amp;p, Eigen::Vector3i &amp;index) const</td></tr>
<tr class="memdesc:a3dc6098c925df8dd7d769cdd9a48d388"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the 3d index (x,y,z) of the cell based on the location of the cell  <a href="classpcl_1_1_grid_projection.html#a3dc6098c925df8dd7d769cdd9a48d388">更多...</a><br /></td></tr>
<tr class="separator:a3dc6098c925df8dd7d769cdd9a48d388"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7be2fc98e055e9b0bdef93ad4bed5088"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a7be2fc98e055e9b0bdef93ad4bed5088">getCellCenterFromIndex</a> (const Eigen::Vector3i &amp;index, Eigen::Vector4f &amp;center) const</td></tr>
<tr class="memdesc:a7be2fc98e055e9b0bdef93ad4bed5088"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the 3d index (x, y, z) of the cell, get the coordinates of the cell center  <a href="classpcl_1_1_grid_projection.html#a7be2fc98e055e9b0bdef93ad4bed5088">更多...</a><br /></td></tr>
<tr class="separator:a7be2fc98e055e9b0bdef93ad4bed5088"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9737031e2e20bafbd0cbf68d56aab6bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a9737031e2e20bafbd0cbf68d56aab6bf">getVertexFromCellCenter</a> (const Eigen::Vector4f &amp;cell_center, std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;pts) const</td></tr>
<tr class="memdesc:a9737031e2e20bafbd0cbf68d56aab6bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given cell center, caluate the coordinates of the eight vertices of the cell  <a href="classpcl_1_1_grid_projection.html#a9737031e2e20bafbd0cbf68d56aab6bf">更多...</a><br /></td></tr>
<tr class="separator:a9737031e2e20bafbd0cbf68d56aab6bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada1e79d0c17350a5d877a4bb62f49559"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">getIndexIn1D</a> (const Eigen::Vector3i &amp;index) const</td></tr>
<tr class="memdesc:ada1e79d0c17350a5d877a4bb62f49559"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given an index (x, y, z) in 3d, translate it into the index in 1d  <a href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">更多...</a><br /></td></tr>
<tr class="separator:ada1e79d0c17350a5d877a4bb62f49559"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0dabfb35173b2618cc09e2399229b3bc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a0dabfb35173b2618cc09e2399229b3bc">getIndexIn3D</a> (int index_1d, Eigen::Vector3i &amp;index_3d) const</td></tr>
<tr class="memdesc:a0dabfb35173b2618cc09e2399229b3bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given an index in 1d, translate it into the index (x, y, z) in 3d  <a href="classpcl_1_1_grid_projection.html#a0dabfb35173b2618cc09e2399229b3bc">更多...</a><br /></td></tr>
<tr class="separator:a0dabfb35173b2618cc09e2399229b3bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:addddfa2765e87d007286da283e1bb785"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#addddfa2765e87d007286da283e1bb785">fillPad</a> (const Eigen::Vector3i &amp;index)</td></tr>
<tr class="memdesc:addddfa2765e87d007286da283e1bb785"><td class="mdescLeft">&#160;</td><td class="mdescRight">For a given 3d index of a cell, test whether the cells within its padding area exist in the hash table, if no, create an entry for that cell.  <a href="classpcl_1_1_grid_projection.html#addddfa2765e87d007286da283e1bb785">更多...</a><br /></td></tr>
<tr class="separator:addddfa2765e87d007286da283e1bb785"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8911f8091c13fced97e02517394cc92b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a8911f8091c13fced97e02517394cc92b">getDataPtsUnion</a> (const Eigen::Vector3i &amp;index, std::vector&lt; int &gt; &amp;pt_union_indices)</td></tr>
<tr class="memdesc:a8911f8091c13fced97e02517394cc92b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtain the index of a cell and the pad size.  <a href="classpcl_1_1_grid_projection.html#a8911f8091c13fced97e02517394cc92b">更多...</a><br /></td></tr>
<tr class="separator:a8911f8091c13fced97e02517394cc92b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5eb7fadd9ea168c7e7f6b179e9e03f9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#ac5eb7fadd9ea168c7e7f6b179e9e03f9">createSurfaceForCell</a> (const Eigen::Vector3i &amp;index, std::vector&lt; int &gt; &amp;pt_union_indices)</td></tr>
<tr class="memdesc:ac5eb7fadd9ea168c7e7f6b179e9e03f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the index of a cell, exam it's up, left, front edges, and add the vectices to m_surface list.the up, left, front edges only share 4 points, we first get the vectors at these 4 points and exam whether those three edges are intersected by the surface  <a href="classpcl_1_1_grid_projection.html#ac5eb7fadd9ea168c7e7f6b179e9e03f9">更多...</a><br /></td></tr>
<tr class="separator:ac5eb7fadd9ea168c7e7f6b179e9e03f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae80852b9daa1e3969edbcb55de2f9bfd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#ae80852b9daa1e3969edbcb55de2f9bfd">getProjection</a> (const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector4f &amp;projection)</td></tr>
<tr class="memdesc:ae80852b9daa1e3969edbcb55de2f9bfd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the coordinates of one point, project it onto the surface, return the projected point. Do a binary search between p and p+projection_distance to find the projected point  <a href="classpcl_1_1_grid_projection.html#ae80852b9daa1e3969edbcb55de2f9bfd">更多...</a><br /></td></tr>
<tr class="separator:ae80852b9daa1e3969edbcb55de2f9bfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8fcbd49493eae00ac9b08c3ad9d84470"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a8fcbd49493eae00ac9b08c3ad9d84470">getProjectionWithPlaneFit</a> (const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector4f &amp;projection)</td></tr>
<tr class="memdesc:a8fcbd49493eae00ac9b08c3ad9d84470"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the coordinates of one point, project it onto the surface, return the projected point. Find the plane which fits all the points in pt_union_indices, projected p to the plane to get the projected point.  <a href="classpcl_1_1_grid_projection.html#a8fcbd49493eae00ac9b08c3ad9d84470">更多...</a><br /></td></tr>
<tr class="separator:a8fcbd49493eae00ac9b08c3ad9d84470"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a074763eb0e0911eaad45550917bd8d83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">getVectorAtPoint</a> (const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector3f &amp;vo)</td></tr>
<tr class="memdesc:a074763eb0e0911eaad45550917bd8d83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the location of a point, get it's vector  <a href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">更多...</a><br /></td></tr>
<tr class="separator:a074763eb0e0911eaad45550917bd8d83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a060f7e37755634942614e7db6a51bc2f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a060f7e37755634942614e7db6a51bc2f">getVectorAtPointKNN</a> (const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;k_indices, std::vector&lt; float &gt; &amp;k_squared_distances, Eigen::Vector3f &amp;vo)</td></tr>
<tr class="memdesc:a060f7e37755634942614e7db6a51bc2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the location of a point, get it's vector  <a href="classpcl_1_1_grid_projection.html#a060f7e37755634942614e7db6a51bc2f">更多...</a><br /></td></tr>
<tr class="separator:a060f7e37755634942614e7db6a51bc2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0dd2b2c908b476f89d409fdd75eaf651"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a0dd2b2c908b476f89d409fdd75eaf651">getMagAtPoint</a> (const Eigen::Vector4f &amp;p, const std::vector&lt; int &gt; &amp;pt_union_indices)</td></tr>
<tr class="memdesc:a0dd2b2c908b476f89d409fdd75eaf651"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the magnitude of the vector by summing up the distance.  <a href="classpcl_1_1_grid_projection.html#a0dd2b2c908b476f89d409fdd75eaf651">更多...</a><br /></td></tr>
<tr class="separator:a0dd2b2c908b476f89d409fdd75eaf651"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4088a346e9317fccdf6ab2d0f6f21026"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">getD1AtPoint</a> (const Eigen::Vector4f &amp;p, const Eigen::Vector3f &amp;vec, const std::vector&lt; int &gt; &amp;pt_union_indices)</td></tr>
<tr class="memdesc:a4088a346e9317fccdf6ab2d0f6f21026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the 1st derivative  <a href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">更多...</a><br /></td></tr>
<tr class="separator:a4088a346e9317fccdf6ab2d0f6f21026"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a548e9827c1cb590510e55b6285952ca1"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a548e9827c1cb590510e55b6285952ca1">getD2AtPoint</a> (const Eigen::Vector4f &amp;p, const Eigen::Vector3f &amp;vec, const std::vector&lt; int &gt; &amp;pt_union_indices)</td></tr>
<tr class="memdesc:a548e9827c1cb590510e55b6285952ca1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the 2nd derivative  <a href="classpcl_1_1_grid_projection.html#a548e9827c1cb590510e55b6285952ca1">更多...</a><br /></td></tr>
<tr class="separator:a548e9827c1cb590510e55b6285952ca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad417229bdf16b68c1ce7830bcbfbf758"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#ad417229bdf16b68c1ce7830bcbfbf758">isIntersected</a> (const std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;end_pts, std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;vect_at_end_pts, std::vector&lt; int &gt; &amp;pt_union_indices)</td></tr>
<tr class="memdesc:ad417229bdf16b68c1ce7830bcbfbf758"><td class="mdescLeft">&#160;</td><td class="mdescRight">Test whether the edge is intersected by the surface by doing the dot product of the vector at two end points. Also test whether the edge is intersected by the maximum surface by examing the 2nd derivative of the intersection point  <a href="classpcl_1_1_grid_projection.html#ad417229bdf16b68c1ce7830bcbfbf758">更多...</a><br /></td></tr>
<tr class="separator:ad417229bdf16b68c1ce7830bcbfbf758"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a624615f1f4b63e4c7b9094bdc14a64f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a624615f1f4b63e4c7b9094bdc14a64f4">findIntersection</a> (int level, const std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;end_pts, const std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;vect_at_end_pts, const Eigen::Vector4f &amp;start_pt, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector4f &amp;intersection)</td></tr>
<tr class="memdesc:a624615f1f4b63e4c7b9094bdc14a64f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find point where the edge intersects the surface.  <a href="classpcl_1_1_grid_projection.html#a624615f1f4b63e4c7b9094bdc14a64f4">更多...</a><br /></td></tr>
<tr class="separator:a624615f1f4b63e4c7b9094bdc14a64f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac13ae4b11bb74d2efd2253dcca78862"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#aac13ae4b11bb74d2efd2253dcca78862">storeVectAndSurfacePoint</a> (int index_1d, const Eigen::Vector3i &amp;index_3d, std::vector&lt; int &gt; &amp;pt_union_indices, const <a class="el" href="structpcl_1_1_grid_projection_1_1_leaf.html">Leaf</a> &amp;cell_data)</td></tr>
<tr class="memdesc:aac13ae4b11bb74d2efd2253dcca78862"><td class="mdescLeft">&#160;</td><td class="mdescRight">Go through all the entries in the hash table and update the cellData.  <a href="classpcl_1_1_grid_projection.html#aac13ae4b11bb74d2efd2253dcca78862">更多...</a><br /></td></tr>
<tr class="separator:aac13ae4b11bb74d2efd2253dcca78862"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18151db726b30e36c9e7cfbb45b4a47f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a18151db726b30e36c9e7cfbb45b4a47f">storeVectAndSurfacePointKNN</a> (int index_1d, const Eigen::Vector3i &amp;index_3d, const <a class="el" href="structpcl_1_1_grid_projection_1_1_leaf.html">Leaf</a> &amp;cell_data)</td></tr>
<tr class="memdesc:a18151db726b30e36c9e7cfbb45b4a47f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Go through all the entries in the hash table and update the cellData. When creating the hash table, the pt_on_surface field store the center point of the cell.After calling this function, the projection operator will project the center point onto the surface, and the pt_on_surface field will be updated using the projected point.Also the vect_at_grid_pt field will be updated using the vector at the upper left front vertex of the cell. When projecting the point and calculating the vector, using K nearest neighbors instead of using the union of input data point within the cell and pads.  <a href="classpcl_1_1_grid_projection.html#a18151db726b30e36c9e7cfbb45b4a47f">更多...</a><br /></td></tr>
<tr class="separator:a18151db726b30e36c9e7cfbb45b4a47f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">initCompute</a> ()</td></tr>
<tr class="memdesc:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called before starting the actual computation.  <a href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">更多...</a><br /></td></tr>
<tr class="separator:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="afc426c4eebb94b7734d4fa556bff1420"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#afc426c4eebb94b7734d4fa556bff1420">deinitCompute</a> ()</td></tr>
<tr class="memdesc:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called after finishing the actual computation. <br /></td></tr>
<tr class="separator:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:accb89fd7f79f85b8170d99a0c7a3d965"><td class="memItemLeft" align="right" valign="top"><a id="accb89fd7f79f85b8170d99a0c7a3d965"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#accb89fd7f79f85b8170d99a0c7a3d965">getClassName</a> () const</td></tr>
<tr class="memdesc:accb89fd7f79f85b8170d99a0c7a3d965"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class get name method. <br /></td></tr>
<tr class="separator:accb89fd7f79f85b8170d99a0c7a3d965"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a0fe973720c8ca47f13a76bff939ebff8"><td class="memItemLeft" align="right" valign="top"><a id="a0fe973720c8ca47f13a76bff939ebff8"></a>
HashMap&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a></td></tr>
<tr class="memdesc:a0fe973720c8ca47f13a76bff939ebff8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Map containing the set of leaves. <br /></td></tr>
<tr class="separator:a0fe973720c8ca47f13a76bff939ebff8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4f7aae2108315c64836a1b5dc986c16"><td class="memItemLeft" align="right" valign="top"><a id="aa4f7aae2108315c64836a1b5dc986c16"></a>
Eigen::Vector4f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#aa4f7aae2108315c64836a1b5dc986c16">min_p_</a></td></tr>
<tr class="memdesc:aa4f7aae2108315c64836a1b5dc986c16"><td class="mdescLeft">&#160;</td><td class="mdescRight">Min and max data points. <br /></td></tr>
<tr class="separator:aa4f7aae2108315c64836a1b5dc986c16"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f0b52441cee8fe82692897e0610340e"><td class="memItemLeft" align="right" valign="top"><a id="a7f0b52441cee8fe82692897e0610340e"></a>
Eigen::Vector4f&#160;</td><td class="memItemRight" valign="bottom"><b>max_p_</b></td></tr>
<tr class="separator:a7f0b52441cee8fe82692897e0610340e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cee8f9aa36b1bb5dc4370b90e827c8e"><td class="memItemLeft" align="right" valign="top"><a id="a3cee8f9aa36b1bb5dc4370b90e827c8e"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a></td></tr>
<tr class="memdesc:a3cee8f9aa36b1bb5dc4370b90e827c8e"><td class="mdescLeft">&#160;</td><td class="mdescRight">The size of a leaf. <br /></td></tr>
<tr class="separator:a3cee8f9aa36b1bb5dc4370b90e827c8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad89d80aba208d78bc04e9f2633d3cb20"><td class="memItemLeft" align="right" valign="top"><a id="ad89d80aba208d78bc04e9f2633d3cb20"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#ad89d80aba208d78bc04e9f2633d3cb20">gaussian_scale_</a></td></tr>
<tr class="memdesc:ad89d80aba208d78bc04e9f2633d3cb20"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gaussian scale. <br /></td></tr>
<tr class="separator:ad89d80aba208d78bc04e9f2633d3cb20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ff22386ab5698821cb80b801a32056c"><td class="memItemLeft" align="right" valign="top"><a id="a3ff22386ab5698821cb80b801a32056c"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a></td></tr>
<tr class="memdesc:a3ff22386ab5698821cb80b801a32056c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data size. <br /></td></tr>
<tr class="separator:a3ff22386ab5698821cb80b801a32056c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa50cfdd9a31a847389e5bcd56a4cb5e0"><td class="memItemLeft" align="right" valign="top"><a id="aa50cfdd9a31a847389e5bcd56a4cb5e0"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#aa50cfdd9a31a847389e5bcd56a4cb5e0">max_binary_search_level_</a></td></tr>
<tr class="memdesc:aa50cfdd9a31a847389e5bcd56a4cb5e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Max binary search level. <br /></td></tr>
<tr class="separator:aa50cfdd9a31a847389e5bcd56a4cb5e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62fd3015c12f93c2b6c9708c05350587"><td class="memItemLeft" align="right" valign="top"><a id="a62fd3015c12f93c2b6c9708c05350587"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a></td></tr>
<tr class="memdesc:a62fd3015c12f93c2b6c9708c05350587"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of neighbors (k) to use. <br /></td></tr>
<tr class="separator:a62fd3015c12f93c2b6c9708c05350587"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e450c217b04e02ef42278defbf7d5ea"><td class="memItemLeft" align="right" valign="top"><a id="a6e450c217b04e02ef42278defbf7d5ea"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a></td></tr>
<tr class="memdesc:a6e450c217b04e02ef42278defbf7d5ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Padding size. <br /></td></tr>
<tr class="separator:a6e450c217b04e02ef42278defbf7d5ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace122ae8c96ea70b806f6c857d655a98"><td class="memItemLeft" align="right" valign="top"><a id="ace122ae8c96ea70b806f6c857d655a98"></a>
PointCloudPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a></td></tr>
<tr class="memdesc:ace122ae8c96ea70b806f6c857d655a98"><td class="mdescLeft">&#160;</td><td class="mdescRight">The point cloud input (XYZ+Normals). <br /></td></tr>
<tr class="separator:ace122ae8c96ea70b806f6c857d655a98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98f838a58b1fec937bcfe4df9e6186bd"><td class="memItemLeft" align="right" valign="top"><a id="a98f838a58b1fec937bcfe4df9e6186bd"></a>
std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a98f838a58b1fec937bcfe4df9e6186bd">vector_at_data_point_</a></td></tr>
<tr class="memdesc:a98f838a58b1fec937bcfe4df9e6186bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store the surface normal(vector) at the each input data point. <br /></td></tr>
<tr class="separator:a98f838a58b1fec937bcfe4df9e6186bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81f1d32f2f3c2cab29be06f658fe8fbd"><td class="memItemLeft" align="right" valign="top"><a id="a81f1d32f2f3c2cab29be06f658fe8fbd"></a>
std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a></td></tr>
<tr class="memdesc:a81f1d32f2f3c2cab29be06f658fe8fbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">An array of points which lay on the output surface. <br /></td></tr>
<tr class="separator:a81f1d32f2f3c2cab29be06f658fe8fbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0cad4a01d8f380bb319d9a9b9893f97"><td class="memItemLeft" align="right" valign="top"><a id="af0cad4a01d8f380bb319d9a9b9893f97"></a>
boost::dynamic_bitset&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">occupied_cell_list_</a></td></tr>
<tr class="memdesc:af0cad4a01d8f380bb319d9a9b9893f97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bit map which tells if there is any input data point in the cell. <br /></td></tr>
<tr class="separator:af0cad4a01d8f380bb319d9a9b9893f97"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
额外继承的成员函数</h2></td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_surface_reconstruction"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_surface_reconstruction')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_surface_reconstruction.html">pcl::SurfaceReconstruction&lt; PointNT &gt;</a></td></tr>
<tr class="memitem:a28e8c20a22904c2b368e36f5fcc841b1 inherit pro_attribs_classpcl_1_1_surface_reconstruction"><td class="memItemLeft" align="right" valign="top"><a id="a28e8c20a22904c2b368e36f5fcc841b1"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_surface_reconstruction.html#a28e8c20a22904c2b368e36f5fcc841b1">check_tree_</a></td></tr>
<tr class="memdesc:a28e8c20a22904c2b368e36f5fcc841b1 inherit pro_attribs_classpcl_1_1_surface_reconstruction"><td class="mdescLeft">&#160;</td><td class="mdescRight">A flag specifying whether or not the derived reconstruction algorithm needs the search object <em>tree</em>. <br /></td></tr>
<tr class="separator:a28e8c20a22904c2b368e36f5fcc841b1 inherit pro_attribs_classpcl_1_1_surface_reconstruction"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_p_c_l_surface_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_p_c_l_surface_base')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_p_c_l_surface_base.html">pcl::PCLSurfaceBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:a28d2f448602636061ef7d716e0f6e930 inherit pro_attribs_classpcl_1_1_p_c_l_surface_base"><td class="memItemLeft" align="right" valign="top"><a id="a28d2f448602636061ef7d716e0f6e930"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_surface_base.html#a28d2f448602636061ef7d716e0f6e930">tree_</a></td></tr>
<tr class="memdesc:a28d2f448602636061ef7d716e0f6e930 inherit pro_attribs_classpcl_1_1_p_c_l_surface_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the spatial search object. <br /></td></tr>
<tr class="separator:a28d2f448602636061ef7d716e0f6e930 inherit pro_attribs_classpcl_1_1_p_c_l_surface_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a09c70d8e06e3fb4f07903fe6f8d67869"></a>
PointCloudConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a></td></tr>
<tr class="memdesc:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input point cloud dataset. <br /></td></tr>
<tr class="separator:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="aaee847c8a517ebf365bad2cb182a6626"></a>
IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a></td></tr>
<tr class="memdesc:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the vector of point indices to use. <br /></td></tr>
<tr class="separator:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ada1eadb824d34ca9206a86343d9760bb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ada1eadb824d34ca9206a86343d9760bb">use_indices_</a></td></tr>
<tr class="memdesc:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to true if point indices are used. <br /></td></tr>
<tr class="separator:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="adadb0299f144528020ed558af6879662"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#adadb0299f144528020ed558af6879662">fake_indices_</a></td></tr>
<tr class="memdesc:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud. <br /></td></tr>
<tr class="separator:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointNT&gt;<br />
class pcl::GridProjection&lt; PointNT &gt;</h3>

<p><a class="el" href="class_grid.html">Grid</a> projection surface reconstruction method. </p>
<dl class="section author"><dt>作者</dt><dd>Rosie Li</dd></dl>
<dl class="section note"><dt>注解</dt><dd>If you use this code in any academic work, please cite:<ul>
<li>Ruosi Li, Lu Liu, Ly Phan, Sasakthi Abeysinghe, Cindy Grimm, Tao Ju. Polygonizing extremal surfaces with manifold guarantees. In Proceedings of the 14th ACM Symposium on Solid and Physical Modeling, 2010. </li>
</ul>
</dd></dl>
</div><h2 class="groupheader">构造及析构函数说明</h2>
<a id="acb6b9a0bf64fe78bbd8c8b16b95735fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb6b9a0bf64fe78bbd8c8b16b95735fa">&#9670;&nbsp;</a></span>GridProjection()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::<a class="el" href="classpcl_1_1_grid_projection.html">GridProjection</a> </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>in_resolution</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructor. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">in_resolution</td><td>set the resolution of the grid </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;                                                             :</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a> (), <a class="code" href="classpcl_1_1_grid_projection.html#aa4f7aae2108315c64836a1b5dc986c16">min_p_</a> (), max_p_ (), <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a> (resolution), <a class="code" href="classpcl_1_1_grid_projection.html#ad89d80aba208d78bc04e9f2633d3cb20">gaussian_scale_</a> (),</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a> (0), <a class="code" href="classpcl_1_1_grid_projection.html#aa50cfdd9a31a847389e5bcd56a4cb5e0">max_binary_search_level_</a> (10), <a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a> (50), <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a> (3), <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a> (),</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a98f838a58b1fec937bcfe4df9e6186bd">vector_at_data_point_</a> (), <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a> (), <a class="code" href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">occupied_cell_list_</a> ()</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;{}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a0fe973720c8ca47f13a76bff939ebff8"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">pcl::GridProjection::cell_hash_map_</a></div><div class="ttdeci">HashMap cell_hash_map_</div><div class="ttdoc">Map containing the set of leaves.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:462</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a3cee8f9aa36b1bb5dc4370b90e827c8e"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">pcl::GridProjection::leaf_size_</a></div><div class="ttdeci">double leaf_size_</div><div class="ttdoc">The size of a leaf.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:468</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a3ff22386ab5698821cb80b801a32056c"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">pcl::GridProjection::data_size_</a></div><div class="ttdeci">int data_size_</div><div class="ttdoc">Data size.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:474</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a62fd3015c12f93c2b6c9708c05350587"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">pcl::GridProjection::k_</a></div><div class="ttdeci">int k_</div><div class="ttdoc">Number of neighbors (k) to use.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:480</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a6e450c217b04e02ef42278defbf7d5ea"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">pcl::GridProjection::padding_size_</a></div><div class="ttdeci">int padding_size_</div><div class="ttdoc">Padding size.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:483</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a81f1d32f2f3c2cab29be06f658fe8fbd"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">pcl::GridProjection::surface_</a></div><div class="ttdeci">std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; surface_</div><div class="ttdoc">An array of points which lay on the output surface.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:492</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a98f838a58b1fec937bcfe4df9e6186bd"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a98f838a58b1fec937bcfe4df9e6186bd">pcl::GridProjection::vector_at_data_point_</a></div><div class="ttdeci">std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; vector_at_data_point_</div><div class="ttdoc">Store the surface normal(vector) at the each input data point.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:489</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_aa4f7aae2108315c64836a1b5dc986c16"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#aa4f7aae2108315c64836a1b5dc986c16">pcl::GridProjection::min_p_</a></div><div class="ttdeci">Eigen::Vector4f min_p_</div><div class="ttdoc">Min and max data points.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:465</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_aa50cfdd9a31a847389e5bcd56a4cb5e0"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#aa50cfdd9a31a847389e5bcd56a4cb5e0">pcl::GridProjection::max_binary_search_level_</a></div><div class="ttdeci">int max_binary_search_level_</div><div class="ttdoc">Max binary search level.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:477</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_ace122ae8c96ea70b806f6c857d655a98"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">pcl::GridProjection::data_</a></div><div class="ttdeci">PointCloudPtr data_</div><div class="ttdoc">The point cloud input (XYZ+Normals).</div><div class="ttdef"><b>Definition:</b> grid_projection.h:486</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_ad89d80aba208d78bc04e9f2633d3cb20"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#ad89d80aba208d78bc04e9f2633d3cb20">pcl::GridProjection::gaussian_scale_</a></div><div class="ttdeci">double gaussian_scale_</div><div class="ttdoc">Gaussian scale.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:471</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_af0cad4a01d8f380bb319d9a9b9893f97"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">pcl::GridProjection::occupied_cell_list_</a></div><div class="ttdeci">boost::dynamic_bitset occupied_cell_list_</div><div class="ttdoc">Bit map which tells if there is any input data point in the cell.</div><div class="ttdef"><b>Definition:</b> grid_projection.h:495</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="ac5eb7fadd9ea168c7e7f6b179e9e03f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5eb7fadd9ea168c7e7f6b179e9e03f9">&#9670;&nbsp;</a></span>createSurfaceForCell()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::createSurfaceForCell </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given the index of a cell, exam it's up, left, front edges, and add the vectices to m_surface list.the up, left, front edges only share 4 points, we first get the vectors at these 4 points and exam whether those three edges are intersected by the surface </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index</td><td>the input index </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;{</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  <span class="comment">// 8 vertices of the cell</span></div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  std::vector&lt;Eigen::Vector4f, Eigen::aligned_allocator&lt;Eigen::Vector4f&gt; &gt; vertices (8);</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160; </div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  <span class="comment">// 4 end points that shared by 3 edges connecting the upper left front points</span></div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  Eigen::Vector4f pts[4];</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  Eigen::Vector3f vector_at_pts[4];</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160; </div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  <span class="comment">// Given the index of cell, caluate the coordinates of the eight vertices of the cell</span></div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  <span class="comment">// index the index of the cell in (x,y,z) 3d format</span></div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  Eigen::Vector4f cell_center = Eigen::Vector4f::Zero ();</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a7be2fc98e055e9b0bdef93ad4bed5088">getCellCenterFromIndex</a> (index, cell_center);</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a9737031e2e20bafbd0cbf68d56aab6bf">getVertexFromCellCenter</a> (cell_center, vertices);</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="comment">// Get the indices of the cells which stores the 4 end points.</span></div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  Eigen::Vector3i indices[4];</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  indices[0] = Eigen::Vector3i (index[0], index[1], index[2] - 1);</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  indices[1] = Eigen::Vector3i (index[0], index[1], index[2]);</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  indices[2] = Eigen::Vector3i (index[0], index[1] - 1, index[2]);</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  indices[3] = Eigen::Vector3i (index[0] + 1, index[1], index[2]);</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160; </div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  <span class="comment">// Get the coordinate of the 4 end points, and the corresponding vectors</span></div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 4; ++i)</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  {</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    pts[i] = vertices[I_SHIFT_PT[i]];</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index_1d = <a class="code" href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">getIndexIn1D</a> (indices[i]);</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.find (index_1d) == <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.end () ||</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <a class="code" href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">occupied_cell_list_</a>[index_1d] == 0)</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;      vector_at_pts[i] = <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.at (index_1d).vect_at_grid_pt;</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;  }</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  <span class="comment">// Go through the 3 edges, test whether they are intersected by the surface</span></div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 3; ++i)</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  {</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    std::vector&lt;Eigen::Vector4f, Eigen::aligned_allocator&lt;Eigen::Vector4f&gt; &gt; end_pts (2);</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    std::vector&lt;Eigen::Vector3f, Eigen::aligned_allocator&lt;Eigen::Vector3f&gt; &gt; vect_at_end_pts (2);</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; 2; ++j)</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    {</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;      end_pts[j] = pts[I_SHIFT_EDGE[i][j]];</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;      vect_at_end_pts[j] = vector_at_pts[I_SHIFT_EDGE[i][j]];</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    }</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160; </div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_grid_projection.html#ad417229bdf16b68c1ce7830bcbfbf758">isIntersected</a> (end_pts, vect_at_end_pts, pt_union_indices))</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    {</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;      <span class="comment">// Indices of cells that contains points which will be connected to</span></div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      <span class="comment">// create a polygon</span></div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;      Eigen::Vector3i polygon[4];</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;      Eigen::Vector4f polygon_pts[4];</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;      <span class="keywordtype">int</span> polygon_indices_1d[4];</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;      <span class="keywordtype">bool</span> is_all_in_hash_map = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;      <span class="keywordflow">switch</span> (i)</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;      {</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;        <span class="keywordflow">case</span> 0:</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;          polygon[0] = Eigen::Vector3i (index[0] - 1, index[1] + 1, index[2]);</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;          polygon[1] = Eigen::Vector3i (index[0] - 1, index[1], index[2]);</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;          polygon[2] = Eigen::Vector3i (index[0], index[1], index[2]);</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;          polygon[3] = Eigen::Vector3i (index[0], index[1] + 1, index[2]);</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        <span class="keywordflow">case</span> 1:</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;          polygon[0] = Eigen::Vector3i (index[0], index[1] + 1, index[2] + 1);</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;          polygon[1] = Eigen::Vector3i (index[0], index[1] + 1, index[2]);</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;          polygon[2] = Eigen::Vector3i (index[0], index[1], index[2]);</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;          polygon[3] = Eigen::Vector3i (index[0], index[1], index[2] + 1);</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keywordflow">case</span> 2:</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;          polygon[0] = Eigen::Vector3i (index[0] - 1, index[1], index[2] + 1);</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;          polygon[1] = Eigen::Vector3i (index[0] - 1, index[1], index[2]);</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;          polygon[2] = Eigen::Vector3i (index[0], index[1], index[2]);</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;          polygon[3] = Eigen::Vector3i (index[0], index[1], index[2] + 1);</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;      }</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> k = 0; k &lt; 4; k++)</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      {</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        polygon_indices_1d[k] = <a class="code" href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">getIndexIn1D</a> (polygon[k]);</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">occupied_cell_list_</a>[polygon_indices_1d[k]])</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        {</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;          is_all_in_hash_map = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        }</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      }</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;      <span class="keywordflow">if</span> (is_all_in_hash_map)</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      {</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> k = 0; k &lt; 4; k++)</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        {</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;          polygon_pts[k] = <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.at (polygon_indices_1d[k]).pt_on_surface;</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;          <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>.push_back (polygon_pts[k]);</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        }</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;      }</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  }</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a7be2fc98e055e9b0bdef93ad4bed5088"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a7be2fc98e055e9b0bdef93ad4bed5088">pcl::GridProjection::getCellCenterFromIndex</a></div><div class="ttdeci">void getCellCenterFromIndex(const Eigen::Vector3i &amp;index, Eigen::Vector4f &amp;center) const</div><div class="ttdoc">Given the 3d index (x, y, z) of the cell, get the coordinates of the cell center</div><div class="ttdef"><b>Definition:</b> grid_projection.h:258</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a9737031e2e20bafbd0cbf68d56aab6bf"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a9737031e2e20bafbd0cbf68d56aab6bf">pcl::GridProjection::getVertexFromCellCenter</a></div><div class="ttdeci">void getVertexFromCellCenter(const Eigen::Vector4f &amp;cell_center, std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;pts) const</div><div class="ttdoc">Given cell center, caluate the coordinates of the eight vertices of the cell</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:131</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_ad417229bdf16b68c1ce7830bcbfbf758"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#ad417229bdf16b68c1ce7830bcbfbf758">pcl::GridProjection::isIntersected</a></div><div class="ttdeci">bool isIntersected(const std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;end_pts, std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;vect_at_end_pts, std::vector&lt; int &gt; &amp;pt_union_indices)</div><div class="ttdoc">Test whether the edge is intersected by the surface by doing the dot product of the vector at two end...</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:475</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_ada1e79d0c17350a5d877a4bb62f49559"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">pcl::GridProjection::getIndexIn1D</a></div><div class="ttdeci">int getIndexIn1D(const Eigen::Vector3i &amp;index) const</div><div class="ttdoc">Given an index (x, y, z) in 3d, translate it into the index in 1d</div><div class="ttdef"><b>Definition:</b> grid_projection.h:280</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="addddfa2765e87d007286da283e1bb785"></a>
<h2 class="memtitle"><span class="permalink"><a href="#addddfa2765e87d007286da283e1bb785">&#9670;&nbsp;</a></span>fillPad()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::fillPad </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>For a given 3d index of a cell, test whether the cells within its padding area exist in the hash table, if no, create an entry for that cell. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index</td><td>the index of the cell in (x,y,z) format </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;{</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = index[0] - <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; i &lt; index[0] + <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; ++i)</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  {</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = index[1] - <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; j &lt; index[1] + <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; ++j)</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    {</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = index[2] - <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; k &lt; index[2] + <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; ++k)</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;      {</div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;        Eigen::Vector3i cell_index_3d (i, j, k);</div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cell_index_1d = <a class="code" href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">getIndexIn1D</a> (cell_index_3d);</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.find (cell_index_1d) == <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.end ())</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;        {</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;          <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[cell_index_1d].data_indices.resize (0);</div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;          <a class="code" href="classpcl_1_1_grid_projection.html#a7be2fc98e055e9b0bdef93ad4bed5088">getCellCenterFromIndex</a> (cell_index_3d, <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[cell_index_1d].pt_on_surface);</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;        }</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;      }</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    }</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;  }</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a624615f1f4b63e4c7b9094bdc14a64f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a624615f1f4b63e4c7b9094bdc14a64f4">&#9670;&nbsp;</a></span>findIntersection()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::findIntersection </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>level</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>end_pts</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>vect_at_end_pts</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>start_pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>intersection</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Find point where the edge intersects the surface. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">level</td><td>binary search level </td></tr>
    <tr><td class="paramname">end_pts</td><td>the two end points on the edge </td></tr>
    <tr><td class="paramname">vect_at_end_pts</td><td>the vectors at the two end points </td></tr>
    <tr><td class="paramname">start_pt</td><td>the starting point we use for binary search </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
    <tr><td class="paramname">intersection</td><td>the resultant intersection point </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;{</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;  assert (end_pts.size () == 2);</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;  assert (vect_at_end_pts.size () == 2);</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160; </div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;  Eigen::Vector3f vec;</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">getVectorAtPoint</a> (start_pt, pt_union_indices, vec);</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;  <span class="keywordtype">double</span> d1 = <a class="code" href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">getD1AtPoint</a> (start_pt, vec, pt_union_indices);</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  std::vector&lt;Eigen::Vector4f, Eigen::aligned_allocator&lt;Eigen::Vector4f&gt; &gt; new_end_pts (2);</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;  std::vector&lt;Eigen::Vector3f, Eigen::aligned_allocator&lt;Eigen::Vector3f&gt; &gt; new_vect_at_end_pts (2);</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;  <span class="keywordflow">if</span> ((fabs (d1) &lt; 10e-3) || (level == <a class="code" href="classpcl_1_1_grid_projection.html#aa50cfdd9a31a847389e5bcd56a4cb5e0">max_binary_search_level_</a>))</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  {</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    intersection = start_pt;</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;  }</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;  {</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    vec.normalize ();</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="keywordflow">if</span> (vec.dot (vect_at_end_pts[0]) &lt; 0)</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    {</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;      Eigen::Vector4f new_start_pt = end_pts[0] + (start_pt - end_pts[0]) * 0.5;</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;      new_end_pts[0] = end_pts[0];</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;      new_end_pts[1] = start_pt;</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;      new_vect_at_end_pts[0] = vect_at_end_pts[0];</div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;      new_vect_at_end_pts[1] = vec;</div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#a624615f1f4b63e4c7b9094bdc14a64f4">findIntersection</a> (level + 1, new_end_pts, new_vect_at_end_pts, new_start_pt, pt_union_indices, intersection);</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    }</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <span class="keywordflow">if</span> (vec.dot (vect_at_end_pts[1]) &lt; 0)</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    {</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;      Eigen::Vector4f new_start_pt = start_pt + (end_pts[1] - start_pt) * 0.5;</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;      new_end_pts[0] = start_pt;</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;      new_end_pts[1] = end_pts[1];</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;      new_vect_at_end_pts[0] = vec;</div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;      new_vect_at_end_pts[1] = vect_at_end_pts[1];</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#a624615f1f4b63e4c7b9094bdc14a64f4">findIntersection</a> (level + 1, new_end_pts, new_vect_at_end_pts, new_start_pt, pt_union_indices, intersection);</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    }</div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    intersection = start_pt;</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;  }</div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a074763eb0e0911eaad45550917bd8d83"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">pcl::GridProjection::getVectorAtPoint</a></div><div class="ttdeci">void getVectorAtPoint(const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector3f &amp;vo)</div><div class="ttdoc">Given the location of a point, get it's vector</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:351</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a4088a346e9317fccdf6ab2d0f6f21026"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">pcl::GridProjection::getD1AtPoint</a></div><div class="ttdeci">double getD1AtPoint(const Eigen::Vector4f &amp;p, const Eigen::Vector3f &amp;vec, const std::vector&lt; int &gt; &amp;pt_union_indices)</div><div class="ttdoc">Get the 1st derivative</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:449</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a624615f1f4b63e4c7b9094bdc14a64f4"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a624615f1f4b63e4c7b9094bdc14a64f4">pcl::GridProjection::findIntersection</a></div><div class="ttdeci">void findIntersection(int level, const std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;end_pts, const std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;vect_at_end_pts, const Eigen::Vector4f &amp;start_pt, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector4f &amp;intersection)</div><div class="ttdoc">Find point where the edge intersects the surface.</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:510</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a7be2fc98e055e9b0bdef93ad4bed5088"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7be2fc98e055e9b0bdef93ad4bed5088">&#9670;&nbsp;</a></span>getCellCenterFromIndex()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getCellCenterFromIndex </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>center</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given the 3d index (x, y, z) of the cell, get the coordinates of the cell center </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index</td><td>the output 3d index </td></tr>
    <tr><td class="paramname">center</td><td>the resultant cell center </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;      {</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i)</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;          center[i] = </div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;            <a class="code" href="classpcl_1_1_grid_projection.html#aa4f7aae2108315c64836a1b5dc986c16">min_p_</a>[i] + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (index[i]) * </div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;            <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) + </div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;            <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f;</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a3dc6098c925df8dd7d769cdd9a48d388"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3dc6098c925df8dd7d769cdd9a48d388">&#9670;&nbsp;</a></span>getCellIndex()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getCellIndex </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the 3d index (x,y,z) of the cell based on the location of the cell </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinate of the input point </td></tr>
    <tr><td class="paramname">index</td><td>the output 3d index </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      {</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i)</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;          index[i] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> ((p[i] - <a class="code" href="classpcl_1_1_grid_projection.html#aa4f7aae2108315c64836a1b5dc986c16">min_p_</a>(i)) / <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>);</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a4088a346e9317fccdf6ab2d0f6f21026"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4088a346e9317fccdf6ab2d0f6f21026">&#9670;&nbsp;</a></span>getD1AtPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getD1AtPoint </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>vec</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the 1st derivative </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinate of the input point </td></tr>
    <tr><td class="paramname">vec</td><td>the vector at point p </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;{</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  <span class="keywordtype">double</span> sz = 0.01 * <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>;</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;  Eigen::Vector3f v = vec * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (sz);</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160; </div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;  <span class="keywordtype">double</span> forward  = <a class="code" href="classpcl_1_1_grid_projection.html#a0dd2b2c908b476f89d409fdd75eaf651">getMagAtPoint</a> (p + Eigen::Vector4f (v[0], v[1], v[2], 0), pt_union_indices);</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;  <span class="keywordtype">double</span> backward = <a class="code" href="classpcl_1_1_grid_projection.html#a0dd2b2c908b476f89d409fdd75eaf651">getMagAtPoint</a> (p - Eigen::Vector4f (v[0], v[1], v[2], 0), pt_union_indices);</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;  <span class="keywordflow">return</span> ((forward - backward) / (0.02 * <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>));</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a0dd2b2c908b476f89d409fdd75eaf651"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a0dd2b2c908b476f89d409fdd75eaf651">pcl::GridProjection::getMagAtPoint</a></div><div class="ttdeci">double getMagAtPoint(const Eigen::Vector4f &amp;p, const std::vector&lt; int &gt; &amp;pt_union_indices)</div><div class="ttdoc">Get the magnitude of the vector by summing up the distance.</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:432</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a548e9827c1cb590510e55b6285952ca1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a548e9827c1cb590510e55b6285952ca1">&#9670;&nbsp;</a></span>getD2AtPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getD2AtPoint </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>vec</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the 2nd derivative </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinate of the input point </td></tr>
    <tr><td class="paramname">vec</td><td>the vector at point p </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;{</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;  <span class="keywordtype">double</span> sz = 0.01 * <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>;</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;  Eigen::Vector3f v = vec * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (sz);</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160; </div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;  <span class="keywordtype">double</span> forward = <a class="code" href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">getD1AtPoint</a> (p + Eigen::Vector4f (v[0], v[1], v[2], 0), vec, pt_union_indices);</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;  <span class="keywordtype">double</span> backward = <a class="code" href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">getD1AtPoint</a> (p - Eigen::Vector4f (v[0], v[1], v[2], 0), vec, pt_union_indices);</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;  <span class="keywordflow">return</span> ((forward - backward) / (0.02 * <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>));</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a8911f8091c13fced97e02517394cc92b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8911f8091c13fced97e02517394cc92b">&#9670;&nbsp;</a></span>getDataPtsUnion()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getDataPtsUnion </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Obtain the index of a cell and the pad size. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index</td><td>the input index </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;{</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = index[0] - <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; i &lt;= index[0] + <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; ++i)</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  {</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = index[1] - <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; j &lt;= index[1] + <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; ++j)</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    {</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = index[2] - <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; k &lt;= index[2] + <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a>; ++k)</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      {</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        Eigen::Vector3i cell_index_3d (i, j, k);</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        <span class="keywordtype">int</span> cell_index_1d = <a class="code" href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">getIndexIn1D</a> (cell_index_3d);</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.find (cell_index_1d) != <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.end ())</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        {</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;          <span class="comment">// Get the indices of the input points within the cell(i,j,k), which</span></div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;          <span class="comment">// is stored in the hash map</span></div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;          pt_union_indices.insert (pt_union_indices.end (),</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;                                   <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.at (cell_index_1d).data_indices.begin (),</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;                                   <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.at (cell_index_1d).data_indices.end ());</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        }</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      }</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    }</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  }</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ada1e79d0c17350a5d877a4bb62f49559"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ada1e79d0c17350a5d877a4bb62f49559">&#9670;&nbsp;</a></span>getIndexIn1D()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getIndexIn1D </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given an index (x, y, z) in 3d, translate it into the index in 1d </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index</td><td>the index of the cell in (x,y,z) 3d format </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;      {</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        <span class="comment">//assert(data_size_ &gt; 0);</span></div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        <span class="keywordflow">return</span> (index[0] * <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a> * <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a> + </div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;                index[1] * <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a> + index[2]);</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a0dabfb35173b2618cc09e2399229b3bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0dabfb35173b2618cc09e2399229b3bc">&#9670;&nbsp;</a></span>getIndexIn3D()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getIndexIn3D </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index_1d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index_3d</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given an index in 1d, translate it into the index (x, y, z) in 3d </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index_1d</td><td>the input 1d index </td></tr>
    <tr><td class="paramname">index_3d</td><td>the output 3d index </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;      {</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <span class="comment">//assert(data_size_ &gt; 0);</span></div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        index_3d[0] = index_1d / (<a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a> * <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a>);</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        index_1d -= index_3d[0] * <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a> * <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a>;</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        index_3d[1] = index_1d / <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a>;</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        index_1d -= index_3d[1] * <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a>;</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        index_3d[2] = index_1d;</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a0dd2b2c908b476f89d409fdd75eaf651"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0dd2b2c908b476f89d409fdd75eaf651">&#9670;&nbsp;</a></span>getMagAtPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getMagAtPoint </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the magnitude of the vector by summing up the distance. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinate of the input point </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;{</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;  std::vector &lt;double&gt; pt_union_dist (pt_union_indices.size ());</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;  std::vector &lt;double&gt; pt_union_weight (pt_union_indices.size ());</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;  <span class="keywordtype">double</span> sum = 0.0;</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; pt_union_indices.size (); ++i)</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;  {</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    Eigen::Vector4f pp (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].x, <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].y, <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].z, 0);</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    pt_union_dist[i] = (pp - p).norm ();</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    sum += pow (M_E, -pow (pt_union_dist[i], 2.0) / <a class="code" href="classpcl_1_1_grid_projection.html#ad89d80aba208d78bc04e9f2633d3cb20">gaussian_scale_</a>);</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;  }</div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  <span class="keywordflow">return</span> (sum);</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae80852b9daa1e3969edbcb55de2f9bfd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae80852b9daa1e3969edbcb55de2f9bfd">&#9670;&nbsp;</a></span>getProjection()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getProjection </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>projection</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given the coordinates of one point, project it onto the surface, return the projected point. Do a binary search between p and p+projection_distance to find the projected point </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinates of the input point </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
    <tr><td class="paramname">projection</td><td>the resultant point projected </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;{</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">double</span> projection_distance = <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a> * 3;</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  std::vector&lt;Eigen::Vector4f, Eigen::aligned_allocator&lt;Eigen::Vector4f&gt; &gt; end_pt (2);</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  std::vector&lt;Eigen::Vector3f, Eigen::aligned_allocator&lt;Eigen::Vector3f&gt; &gt; end_pt_vect (2);</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  end_pt[0] = p;</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">getVectorAtPoint</a> (end_pt[0], pt_union_indices, end_pt_vect[0]);</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  end_pt_vect[0].normalize();</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160; </div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;  <span class="keywordtype">double</span> dSecond = <a class="code" href="classpcl_1_1_grid_projection.html#a548e9827c1cb590510e55b6285952ca1">getD2AtPoint</a> (end_pt[0], end_pt_vect[0], pt_union_indices);</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160; </div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;  <span class="comment">// Find another point which is projection_distance away from the p, do a</span></div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;  <span class="comment">// binary search between these two points, to find the projected point on the</span></div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  <span class="comment">// surface</span></div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  <span class="keywordflow">if</span> (dSecond &gt; 0)</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    end_pt[1] = end_pt[0] + Eigen::Vector4f (</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        end_pt_vect[0][0] * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (projection_distance),</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        end_pt_vect[0][1] * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (projection_distance),</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        end_pt_vect[0][2] * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (projection_distance), </div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        0.0f);</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    end_pt[1] = end_pt[0] - Eigen::Vector4f (</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        end_pt_vect[0][0] * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (projection_distance),</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        end_pt_vect[0][1] * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (projection_distance),</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        end_pt_vect[0][2] * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (projection_distance), </div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;        0.0f);</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">getVectorAtPoint</a> (end_pt[1], pt_union_indices, end_pt_vect[1]);</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <span class="keywordflow">if</span> (end_pt_vect[1].dot (end_pt_vect[0]) &lt; 0)</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  {</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    Eigen::Vector4f mid_pt = end_pt[0] + (end_pt[1] - end_pt[0]) * 0.5;</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a624615f1f4b63e4c7b9094bdc14a64f4">findIntersection</a> (0, end_pt, end_pt_vect, mid_pt, pt_union_indices, projection);</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;  }</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    projection = p;</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a548e9827c1cb590510e55b6285952ca1"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a548e9827c1cb590510e55b6285952ca1">pcl::GridProjection::getD2AtPoint</a></div><div class="ttdeci">double getD2AtPoint(const Eigen::Vector4f &amp;p, const Eigen::Vector3f &amp;vec, const std::vector&lt; int &gt; &amp;pt_union_indices)</div><div class="ttdoc">Get the 2nd derivative</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:462</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a8fcbd49493eae00ac9b08c3ad9d84470"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8fcbd49493eae00ac9b08c3ad9d84470">&#9670;&nbsp;</a></span>getProjectionWithPlaneFit()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getProjectionWithPlaneFit </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>projection</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given the coordinates of one point, project it onto the surface, return the projected point. Find the plane which fits all the points in pt_union_indices, projected p to the plane to get the projected point. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinates of the input point </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
    <tr><td class="paramname">projection</td><td>the resultant point projected </td></tr>
  </table>
  </dd>
</dl>
<dl class="section remark"><dt>备注</dt><dd>iterative weighted least squares or sac might give better results</dd></dl>
<div class="fragment"><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;{</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  <span class="comment">// Compute the plane coefficients</span></div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  Eigen::Vector4f model_coefficients;</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  Eigen::Matrix3f covariance_matrix;</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  Eigen::Vector4f xyz_centroid;</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;  <a class="code" href="group__common.html#ga72dfb6e965df9752c88790e026a8ab5f">computeMeanAndCovarianceMatrix</a> (*<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>, pt_union_indices, covariance_matrix, xyz_centroid);</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160; </div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;  <span class="comment">// Get the plane normal</span></div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  EIGEN_ALIGN16 Eigen::Vector3f::Scalar eigen_value;</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;  EIGEN_ALIGN16 Eigen::Vector3f eigen_vector;</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  <a class="code" href="group__common.html#gaca873868052e7d26efcf4b684a17bef2">pcl::eigen33</a> (covariance_matrix, eigen_value, eigen_vector);</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160; </div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;  <span class="comment">// The normalization is not necessary, since the eigenvectors from libeigen are already normalized</span></div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;  model_coefficients[0] = eigen_vector [0];</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;  model_coefficients[1] = eigen_vector [1];</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  model_coefficients[2] = eigen_vector [2];</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;  model_coefficients[3] = 0;</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;  <span class="comment">// Hessian form (D = nc . p_plane (centroid here) + p)</span></div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;  model_coefficients[3] = -1 * model_coefficients.dot (xyz_centroid);</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  <span class="comment">// Projected point</span></div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  Eigen::Vector3f point (p.x (), p.y (), p.z ());     <span class="comment">//= Eigen::Vector3f::MapAligned (&amp;output.points[cp].x, 3);</span></div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  <span class="keywordtype">float</span> <a class="code" href="common_2include_2pcl_2common_2geometry_8h.html#a2fc89f0c26b7c7377fcd2851fa933b87">distance</a> = point.dot (model_coefficients.head &lt;3&gt; ()) + model_coefficients[3];</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  point -= <a class="code" href="common_2include_2pcl_2common_2geometry_8h.html#a2fc89f0c26b7c7377fcd2851fa933b87">distance</a> * model_coefficients.head &lt; 3 &gt; ();</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160; </div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;  projection = Eigen::Vector4f (point[0], point[1], point[2], 0);</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;}</div>
<div class="ttc" id="acommon_2include_2pcl_2common_2geometry_8h_html_a2fc89f0c26b7c7377fcd2851fa933b87"><div class="ttname"><a href="common_2include_2pcl_2common_2geometry_8h.html#a2fc89f0c26b7c7377fcd2851fa933b87">pcl::geometry::distance</a></div><div class="ttdeci">float distance(const PointT &amp;p1, const PointT &amp;p2)</div><div class="ttdef"><b>Definition:</b> geometry.h:60</div></div>
<div class="ttc" id="agroup__common_html_ga72dfb6e965df9752c88790e026a8ab5f"><div class="ttname"><a href="group__common.html#ga72dfb6e965df9752c88790e026a8ab5f">pcl::computeMeanAndCovarianceMatrix</a></div><div class="ttdeci">unsigned int computeMeanAndCovarianceMatrix(const pcl::PointCloud&lt; PointT &gt; &amp;cloud, Eigen::Matrix&lt; Scalar, 3, 3 &gt; &amp;covariance_matrix, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</div><div class="ttdoc">Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single lo...</div><div class="ttdef"><b>Definition:</b> centroid.hpp:489</div></div>
<div class="ttc" id="agroup__common_html_gaca873868052e7d26efcf4b684a17bef2"><div class="ttname"><a href="group__common.html#gaca873868052e7d26efcf4b684a17bef2">pcl::eigen33</a></div><div class="ttdeci">void eigen33(const Matrix &amp;mat, typename Matrix::Scalar &amp;eigenvalue, Vector &amp;eigenvector)</div><div class="ttdoc">determines the eigenvector and eigenvalue of the smallest eigenvalue of the symmetric positive semi d...</div><div class="ttdef"><b>Definition:</b> eigen.hpp:251</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a074763eb0e0911eaad45550917bd8d83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a074763eb0e0911eaad45550917bd8d83">&#9670;&nbsp;</a></span>getVectorAtPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getVectorAtPoint </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>vo</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given the location of a point, get it's vector </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinates of the input point </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
    <tr><td class="paramname">vo</td><td>the resultant vector </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;{</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;  std::vector &lt;double&gt; pt_union_dist (pt_union_indices.size ());</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  std::vector &lt;double&gt; pt_union_weight (pt_union_indices.size ());</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  Eigen::Vector3f out_vector (0, 0, 0);</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  <span class="keywordtype">double</span> sum = 0.0;</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  <span class="keywordtype">double</span> mag = 0.0;</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160; </div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; pt_union_indices.size (); ++i)</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;  {</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    Eigen::Vector4f pp (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].x, <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].y, <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].z, 0);</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    pt_union_dist[i] = (pp - p).squaredNorm ();</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    pt_union_weight[i] = pow (M_E, -pow (pt_union_dist[i], 2.0) / <a class="code" href="classpcl_1_1_grid_projection.html#ad89d80aba208d78bc04e9f2633d3cb20">gaussian_scale_</a>);</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    mag += pow (M_E, -pow (sqrt (pt_union_dist[i]), 2.0) / <a class="code" href="classpcl_1_1_grid_projection.html#ad89d80aba208d78bc04e9f2633d3cb20">gaussian_scale_</a>);</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    sum += pt_union_weight[i];</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  }</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;  <a class="code" href="classpcl_1_1_vector_average.html">pcl::VectorAverage3f</a> vector_average;</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160; </div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  Eigen::Vector3f v (</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[0]].normal[0],</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[0]].normal[1],</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[0]].normal[2]);</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160; </div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; pt_union_weight.size (); ++i)</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  {</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    pt_union_weight[i] /= sum;</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    Eigen::Vector3f vec (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].normal[0],</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                  <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].normal[1],</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;                  <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[pt_union_indices[i]].normal[2]);</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    <span class="keywordflow">if</span> (vec.dot (v) &lt; 0)</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;      vec = -vec;</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    vector_average.<a class="code" href="classpcl_1_1_vector_average.html#a4baf3e577114982e97f6f9a41affaa79">add</a> (vec, <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (pt_union_weight[i]));</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;  }</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;  out_vector = vector_average.<a class="code" href="classpcl_1_1_vector_average.html#af301d1b1c35ce778bdc37f078c8fbe35">getMean</a> ();</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;  <span class="comment">// vector_average.getEigenVector1(out_vector);</span></div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160; </div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;  out_vector.normalize ();</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;  <span class="keywordtype">double</span> d1 = <a class="code" href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">getD1AtPoint</a> (p, out_vector, pt_union_indices);</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  out_vector *= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (sum);</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;  vo = ((d1 &gt; 0) ? -1 : 1) * out_vector;</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_vector_average_html"><div class="ttname"><a href="classpcl_1_1_vector_average.html">pcl::VectorAverage</a></div><div class="ttdoc">Calculates the weighted average and the covariance matrix</div><div class="ttdef"><b>Definition:</b> vector_average.h:54</div></div>
<div class="ttc" id="aclasspcl_1_1_vector_average_html_a4baf3e577114982e97f6f9a41affaa79"><div class="ttname"><a href="classpcl_1_1_vector_average.html#a4baf3e577114982e97f6f9a41affaa79">pcl::VectorAverage::add</a></div><div class="ttdeci">void add(const Eigen::Matrix&lt; real, dimension, 1 &gt; &amp;sample, real weight=1.0)</div><div class="ttdef"><b>Definition:</b> vector_average.hpp:62</div></div>
<div class="ttc" id="aclasspcl_1_1_vector_average_html_af301d1b1c35ce778bdc37f078c8fbe35"><div class="ttname"><a href="classpcl_1_1_vector_average.html#af301d1b1c35ce778bdc37f078c8fbe35">pcl::VectorAverage::getMean</a></div><div class="ttdeci">const Eigen::Matrix&lt; real, dimension, 1 &gt; &amp; getMean() const</div><div class="ttdef"><b>Definition:</b> vector_average.h:69</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a060f7e37755634942614e7db6a51bc2f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a060f7e37755634942614e7db6a51bc2f">&#9670;&nbsp;</a></span>getVectorAtPointKNN()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getVectorAtPointKNN </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>k_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; float &gt; &amp;&#160;</td>
          <td class="paramname"><em>k_squared_distances</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>vo</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given the location of a point, get it's vector </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the coordinates of the input point </td></tr>
    <tr><td class="paramname">k_indices</td><td>the k nearest neighbors of the query point </td></tr>
    <tr><td class="paramname">k_squared_distances</td><td>the squared distances of the k nearest neighbors to the query point </td></tr>
    <tr><td class="paramname">vo</td><td>the resultant vector </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;{</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;  Eigen::Vector3f out_vector (0, 0, 0);</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  std::vector &lt;float&gt; k_weight;</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;  k_weight.resize (<a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a>);</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;  <span class="keywordtype">float</span> sum = 0.0;</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a>; i++)</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;  {</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="comment">//k_weight[i] = pow (M_E, -pow (k_squared_distances[i], 2.0) / gaussian_scale_);</span></div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    k_weight[i] = std::pow (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(M_E), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(-pow (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(k_squared_distances[i]), 2.0f) / <a class="code" href="classpcl_1_1_grid_projection.html#ad89d80aba208d78bc04e9f2633d3cb20">gaussian_scale_</a>));</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    sum += k_weight[i];</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;  }</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;  <a class="code" href="classpcl_1_1_vector_average.html">pcl::VectorAverage3f</a> vector_average;</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a>; i++)</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  {</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    k_weight[i] /= sum;</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    Eigen::Vector3f vec (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[k_indices[i]].normal[0],</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                         <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[k_indices[i]].normal[1],</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                         <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[k_indices[i]].normal[2]);</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    vector_average.<a class="code" href="classpcl_1_1_vector_average.html#a4baf3e577114982e97f6f9a41affaa79">add</a> (vec, k_weight[i]);</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  }</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  vector_average.<a class="code" href="classpcl_1_1_vector_average.html#aa3f5e476a123c3c42b8c982027f161a9">getEigenVector1</a> (out_vector);</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;  out_vector.normalize ();</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;  <span class="keywordtype">double</span> d1 = <a class="code" href="classpcl_1_1_grid_projection.html#a4088a346e9317fccdf6ab2d0f6f21026">getD1AtPoint</a> (p, out_vector, k_indices);</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;  out_vector = out_vector * sum;</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;  vo = ((d1 &gt; 0) ? -1 : 1) * out_vector;</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160; </div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_vector_average_html_aa3f5e476a123c3c42b8c982027f161a9"><div class="ttname"><a href="classpcl_1_1_vector_average.html#aa3f5e476a123c3c42b8c982027f161a9">pcl::VectorAverage::getEigenVector1</a></div><div class="ttdeci">void getEigenVector1(Eigen::Matrix&lt; real, dimension, 1 &gt; &amp;eigen_vector1) const</div><div class="ttdef"><b>Definition:</b> vector_average.hpp:120</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a9737031e2e20bafbd0cbf68d56aab6bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9737031e2e20bafbd0cbf68d56aab6bf">&#9670;&nbsp;</a></span>getVertexFromCellCenter()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::getVertexFromCellCenter </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Vector4f &amp;&#160;</td>
          <td class="paramname"><em>cell_center</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>pts</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given cell center, caluate the coordinates of the eight vertices of the cell </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cell_center</td><td>the coordinates of the cell center </td></tr>
    <tr><td class="paramname">pts</td><td>the coordinates of the 8 vertices </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;{</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  assert (pts.size () == 8);</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="keywordtype">float</span> sz = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f;</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  pts[0] = cell_center + Eigen::Vector4f (-sz,  sz, -sz, 0);</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  pts[1] = cell_center + Eigen::Vector4f (-sz, -sz, -sz, 0);</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  pts[2] = cell_center + Eigen::Vector4f (sz,  -sz, -sz, 0);</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  pts[3] = cell_center + Eigen::Vector4f (sz,   sz, -sz, 0);</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  pts[4] = cell_center + Eigen::Vector4f (-sz,  sz,  sz, 0);</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  pts[5] = cell_center + Eigen::Vector4f (-sz, -sz,  sz, 0);</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  pts[6] = cell_center + Eigen::Vector4f (sz,  -sz,  sz, 0);</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  pts[7] = cell_center + Eigen::Vector4f (sz,   sz,  sz, 0);</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad417229bdf16b68c1ce7830bcbfbf758"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad417229bdf16b68c1ce7830bcbfbf758">&#9670;&nbsp;</a></span>isIntersected()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::isIntersected </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; Eigen::Vector4f, Eigen::aligned_allocator&lt; Eigen::Vector4f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>end_pts</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>vect_at_end_pts</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Test whether the edge is intersected by the surface by doing the dot product of the vector at two end points. Also test whether the edge is intersected by the maximum surface by examing the 2nd derivative of the intersection point </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">end_pts</td><td>the two points of the edge </td></tr>
    <tr><td class="paramname">vect_at_end_pts</td><td></td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and padding cells </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;{</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;  assert (end_pts.size () == 2);</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  assert (vect_at_end_pts.size () == 2);</div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160; </div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;  <span class="keywordtype">double</span> length[2];</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 2; ++i)</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;  {</div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    length[i] = vect_at_end_pts[i].norm ();</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    vect_at_end_pts[i].normalize ();</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;  }</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;  <span class="keywordtype">double</span> dot_prod = vect_at_end_pts[0].dot (vect_at_end_pts[1]);</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;  <span class="keywordflow">if</span> (dot_prod &lt; 0)</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  {</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <span class="keywordtype">double</span> ratio = length[0] / (length[0] + length[1]);</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    Eigen::Vector4f start_pt = </div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;      end_pts[0] + (end_pts[1] - end_pts[0]) * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (ratio);</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    Eigen::Vector4f intersection_pt = Eigen::Vector4f::Zero ();</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a624615f1f4b63e4c7b9094bdc14a64f4">findIntersection</a> (0, end_pts, vect_at_end_pts, start_pt, pt_union_indices, intersection_pt);</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160; </div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    Eigen::Vector3f vec;</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">getVectorAtPoint</a> (intersection_pt, pt_union_indices, vec);</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    vec.normalize ();</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160; </div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    <span class="keywordtype">double</span> d2 = <a class="code" href="classpcl_1_1_grid_projection.html#a548e9827c1cb590510e55b6285952ca1">getD2AtPoint</a> (intersection_pt, vec, pt_union_indices);</div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <span class="keywordflow">if</span> (d2 &lt; 0)</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;      <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;  }</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a8110323bbd4c3b7af31d308246ebeb1a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8110323bbd4c3b7af31d308246ebeb1a">&#9670;&nbsp;</a></span>performReconstruction() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::performReconstruction </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointNT &gt; &amp;&#160;</td>
          <td class="paramname"><em>points</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_vertices.html">pcl::Vertices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>polygons</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create the surface. </p>
<p>The 1st step is filling the padding, so that all the cells in the padding area are in the hash map. The 2nd step is store the vector, and projected point. The 3rd step is finding all the edges intersects the surface, and creating surface.</p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">points</td><td>the resultant points lying on the surface </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">polygons</td><td>the resultant polygons, as a set of vertices. The <a class="el" href="structpcl_1_1_vertices.html" title="Describes a set of vertices in a polygon mesh, by basically storing an array of indices.">Vertices</a> structure contains an array of point indices. </td></tr>
  </table>
  </dd>
</dl>

<p>实现了 <a class="el" href="classpcl_1_1_surface_reconstruction.html#adb79f4f50df09a4b8364a7a9f1920e7a">pcl::SurfaceReconstruction&lt; PointNT &gt;</a>.</p>
<div class="fragment"><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;{</div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_grid_projection.html#a0f79063799f9c6f47e8b8c7a61bae696">reconstructPolygons</a> (polygons))</div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160; </div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;  <span class="comment">// The mesh surface is held in surface_. Copy it to the output format</span></div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;  points.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a> = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;header;</div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;  points.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>.size ());</div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;  points.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = 1;</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;  points.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160; </div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;  points.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (<a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>.size ());</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;  <span class="comment">// Copy the data from surface_ to cloud</span></div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; points.size (); ++i)</div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;  {</div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    points[i].x = <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>[i].x ();</div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    points[i].y = <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>[i].y ();</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    points[i].z = <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>[i].z ();</div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;  }</div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a0f79063799f9c6f47e8b8c7a61bae696"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a0f79063799f9c6f47e8b8c7a61bae696">pcl::GridProjection::reconstructPolygons</a></div><div class="ttdeci">bool reconstructPolygons(std::vector&lt; pcl::Vertices &gt; &amp;polygons)</div><div class="ttdoc">The actual surface reconstruction method.</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:625</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_a09c70d8e06e3fb4f07903fe6f8d67869"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">pcl::PCLBase&lt; PointInT &gt;::input_</a></div><div class="ttdeci">PointCloudConstPtr input_</div><div class="ttdoc">The input point cloud dataset.</div><div class="ttdef"><b>Definition:</b> pcl_base.h:150</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2185a6453f8ad905d7bdf7b45754a160"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">pcl::PointCloud::width</a></div><div class="ttdeci">uint32_t width</div><div class="ttdoc">The point cloud width (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:413</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2d60b6927b31ef89cd3b97e8173ea4aa"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">pcl::PointCloud::resize</a></div><div class="ttdeci">void resize(size_t n)</div><div class="ttdoc">Resize the cloud</div><div class="ttdef"><b>Definition:</b> point_cloud.h:455</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a3ca88d8ebf6f4f35acbc31cdfb38aa94"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">pcl::PointCloud::is_dense</a></div><div class="ttdeci">bool is_dense</div><div class="ttdoc">True if no points are invalid (e.g., have NaN or Inf values).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:418</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a4f34b45220c57f96607513ffad0d9582"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">pcl::PointCloud::height</a></div><div class="ttdeci">uint32_t height</div><div class="ttdoc">The point cloud height (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:415</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a82e0be055a617e5e74102ed62712b352"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">pcl::PointCloud::header</a></div><div class="ttdeci">pcl::PCLHeader header</div><div class="ttdoc">The point cloud header. It contains information about the acquisition time.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:407</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a0022be10a74f9928ca95c566a0cb0de5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0022be10a74f9928ca95c566a0cb0de5">&#9670;&nbsp;</a></span>performReconstruction() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::performReconstruction </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_polygon_mesh.html">pcl::PolygonMesh</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create the surface. </p>
<p>The 1st step is filling the padding, so that all the cells in the padding area are in the hash map. The 2nd step is store the vector, and projected point. The 3rd step is finding all the edges intersects the surface, and creating surface.</p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant polygonal mesh </td></tr>
  </table>
  </dd>
</dl>

<p>实现了 <a class="el" href="classpcl_1_1_surface_reconstruction.html#a181cf1cc5feb909f5e8405bb82780cc1">pcl::SurfaceReconstruction&lt; PointNT &gt;</a>.</p>
<div class="fragment"><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;{</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_grid_projection.html#a0f79063799f9c6f47e8b8c7a61bae696">reconstructPolygons</a> (output.polygons))</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160; </div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;  <span class="comment">// The mesh surface is held in surface_. Copy it to the output format</span></div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;  output.header = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;header;</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160; </div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;  <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::PointXYZ&gt;</a> cloud;</div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;  cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>.size ());</div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;  cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = 1;</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;  cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a3ca88d8ebf6f4f35acbc31cdfb38aa94">is_dense</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160; </div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;  cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (<a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>.size ());</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;  <span class="comment">// Copy the data from surface_ to cloud</span></div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); ++i)</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;  {</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].x = <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>[i].x ();</div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].y = <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>[i].y ();</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i].z = <a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>[i].z ();</div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;  }</div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;  pcl::toPCLPointCloud2 (cloud, output.cloud);</div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html"><div class="ttname"><a href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt; pcl::PointXYZ &gt;</a></div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_af16a62638198313b9c093127c492c884"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">pcl::PointCloud::points</a></div><div class="ttdeci">std::vector&lt; PointT, Eigen::aligned_allocator&lt; PointT &gt; &gt; points</div><div class="ttdoc">The point data.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:410</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a0f79063799f9c6f47e8b8c7a61bae696"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0f79063799f9c6f47e8b8c7a61bae696">&#9670;&nbsp;</a></span>reconstructPolygons()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::reconstructPolygons </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_vertices.html">pcl::Vertices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>polygons</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The actual surface reconstruction method. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">polygons</td><td>the resultant polygons, as a set of vertices. The <a class="el" href="structpcl_1_1_vertices.html" title="Describes a set of vertices in a polygon mesh, by basically storing an array of indices.">Vertices</a> structure contains an array of point indices. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;{</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>.reset (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointNT&gt;</a> (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>));</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a3a200448054e67bd9f6117ebf81a1056">getBoundingBox</a> ();</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160; </div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;  <span class="comment">// Store the point cloud data into the voxel grid, and at the same time</span></div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;  <span class="comment">// create a hash map to store the information for each cell</span></div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.max_load_factor (2.0);</div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.rehash (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points.size () / <span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.max_load_factor ()));</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160; </div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;  <span class="comment">// Go over all points and insert them into the right leaf</span></div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> cp = 0; cp &lt; static_cast&lt;int&gt; (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points.size ()); ++cp)</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  {</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="comment">// Check if the point is invalid</span></div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    <span class="keywordflow">if</span> (!pcl_isfinite (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[cp].x) ||</div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;        !pcl_isfinite (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[cp].y) ||</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        !pcl_isfinite (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[cp].z))</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160; </div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    Eigen::Vector3i index_3d;</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a3dc6098c925df8dd7d769cdd9a48d388">getCellIndex</a> (<a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[cp].getVector4fMap (), index_3d);</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    <span class="keywordtype">int</span> index_1d = <a class="code" href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">getIndexIn1D</a> (index_3d);</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.find (index_1d) == <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.end ())</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    {</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;      Leaf cell_data;</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;      cell_data.data_indices.push_back (cp);</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#a7be2fc98e055e9b0bdef93ad4bed5088">getCellCenterFromIndex</a> (index_3d, cell_data.pt_on_surface);</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[index_1d] = cell_data;</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">occupied_cell_list_</a>[index_1d] = 1;</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    }</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    {</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;      Leaf cell_data = <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>.at (index_1d);</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;      cell_data.data_indices.push_back (cp);</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[index_1d] = cell_data;</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    }</div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;  }</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160; </div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;  Eigen::Vector3i index;</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;  <span class="keywordtype">int</span> numOfFilledPad = 0;</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160; </div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a>; ++i)</div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  {</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a>; ++j)</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    {</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; <a class="code" href="classpcl_1_1_grid_projection.html#a3ff22386ab5698821cb80b801a32056c">data_size_</a>; ++k)</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;      {</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;        index[0] = i;</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;        index[1] = j;</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;        index[2] = k;</div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">occupied_cell_list_</a>[<a class="code" href="classpcl_1_1_grid_projection.html#ada1e79d0c17350a5d877a4bb62f49559">getIndexIn1D</a> (index)])</div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;        {</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;          <a class="code" href="classpcl_1_1_grid_projection.html#addddfa2765e87d007286da283e1bb785">fillPad</a> (index);</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;          numOfFilledPad++;</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;        }</div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;      }</div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    }</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;  }</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160; </div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;  <span class="comment">// Update the hashtable and store the vector and point</span></div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;  BOOST_FOREACH (<span class="keyword">typename</span> HashMap::value_type entry, <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>)</div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;  {</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a0dabfb35173b2618cc09e2399229b3bc">getIndexIn3D</a> (entry.first, index);</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    std::vector &lt;int&gt; pt_union_indices;</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a8911f8091c13fced97e02517394cc92b">getDataPtsUnion</a> (index, pt_union_indices);</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160; </div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    <span class="comment">// Needs at least 10 points (?)</span></div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    <span class="comment">// NOTE: set as parameter later</span></div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <span class="keywordflow">if</span> (pt_union_indices.size () &gt; 10)</div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    {</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#aac13ae4b11bb74d2efd2253dcca78862">storeVectAndSurfacePoint</a> (entry.first, index, pt_union_indices, entry.second);</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;      <span class="comment">//storeVectAndSurfacePointKNN(entry.first, index, entry.second);</span></div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#af0cad4a01d8f380bb319d9a9b9893f97">occupied_cell_list_</a>[entry.first] = 1;</div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    }</div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;  }</div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160; </div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;  <span class="comment">// Go through the hash table another time to extract surface</span></div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;  BOOST_FOREACH (<span class="keyword">typename</span> HashMap::value_type entry, <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>)</div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;  {</div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a0dabfb35173b2618cc09e2399229b3bc">getIndexIn3D</a> (entry.first, index);</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    std::vector &lt;int&gt; pt_union_indices;</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#a8911f8091c13fced97e02517394cc92b">getDataPtsUnion</a> (index, pt_union_indices);</div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160; </div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="comment">// Needs at least 10 points (?)</span></div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <span class="comment">// NOTE: set as parameter later</span></div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;    <span class="keywordflow">if</span> (pt_union_indices.size () &gt; 10)</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;      <a class="code" href="classpcl_1_1_grid_projection.html#ac5eb7fadd9ea168c7e7f6b179e9e03f9">createSurfaceForCell</a> (index, pt_union_indices);</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;  }</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160; </div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;  polygons.resize (<a class="code" href="classpcl_1_1_grid_projection.html#a81f1d32f2f3c2cab29be06f658fe8fbd">surface_</a>.size () / 4);</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;  <span class="comment">// Copy the data from surface_ to polygons</span></div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; static_cast&lt;int&gt; (polygons.size ()); ++i)</div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;  {</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <a class="code" href="structpcl_1_1_vertices.html">pcl::Vertices</a> v;</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    v.vertices.resize (4);</div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; 4; ++j)</div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;      v.vertices[j] = i*4+j;</div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;     polygons[i] = v;</div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;  }</div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a0dabfb35173b2618cc09e2399229b3bc"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a0dabfb35173b2618cc09e2399229b3bc">pcl::GridProjection::getIndexIn3D</a></div><div class="ttdeci">void getIndexIn3D(int index_1d, Eigen::Vector3i &amp;index_3d) const</div><div class="ttdoc">Given an index in 1d, translate it into the index (x, y, z) in 3d</div><div class="ttdef"><b>Definition:</b> grid_projection.h:293</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a3a200448054e67bd9f6117ebf81a1056"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a3a200448054e67bd9f6117ebf81a1056">pcl::GridProjection::getBoundingBox</a></div><div class="ttdeci">void getBoundingBox()</div><div class="ttdoc">Get the bounding box for the input data points, also calculating the cell size, and the gaussian scal...</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:90</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a3dc6098c925df8dd7d769cdd9a48d388"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a3dc6098c925df8dd7d769cdd9a48d388">pcl::GridProjection::getCellIndex</a></div><div class="ttdeci">void getCellIndex(const Eigen::Vector4f &amp;p, Eigen::Vector3i &amp;index) const</div><div class="ttdoc">Get the 3d index (x,y,z) of the cell based on the location of the cell</div><div class="ttdef"><b>Definition:</b> grid_projection.h:246</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a8911f8091c13fced97e02517394cc92b"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a8911f8091c13fced97e02517394cc92b">pcl::GridProjection::getDataPtsUnion</a></div><div class="ttdeci">void getDataPtsUnion(const Eigen::Vector3i &amp;index, std::vector&lt; int &gt; &amp;pt_union_indices)</div><div class="ttdoc">Obtain the index of a cell and the pad size.</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:151</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_aac13ae4b11bb74d2efd2253dcca78862"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#aac13ae4b11bb74d2efd2253dcca78862">pcl::GridProjection::storeVectAndSurfacePoint</a></div><div class="ttdeci">void storeVectAndSurfacePoint(int index_1d, const Eigen::Vector3i &amp;index_3d, std::vector&lt; int &gt; &amp;pt_union_indices, const Leaf &amp;cell_data)</div><div class="ttdoc">Go through all the entries in the hash table and update the cellData.</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:584</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_ac5eb7fadd9ea168c7e7f6b179e9e03f9"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#ac5eb7fadd9ea168c7e7f6b179e9e03f9">pcl::GridProjection::createSurfaceForCell</a></div><div class="ttdeci">void createSurfaceForCell(const Eigen::Vector3i &amp;index, std::vector&lt; int &gt; &amp;pt_union_indices)</div><div class="ttdoc">Given the index of a cell, exam it's up, left, front edges, and add the vectices to m_surface list....</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:177</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_addddfa2765e87d007286da283e1bb785"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#addddfa2765e87d007286da283e1bb785">pcl::GridProjection::fillPad</a></div><div class="ttdeci">void fillPad(const Eigen::Vector3i &amp;index)</div><div class="ttdoc">For a given 3d index of a cell, test whether the cells within its padding area exist in the hash tabl...</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:561</div></div>
<div class="ttc" id="astructpcl_1_1_vertices_html"><div class="ttname"><a href="structpcl_1_1_vertices.html">pcl::Vertices</a></div><div class="ttdoc">Describes a set of vertices in a polygon mesh, by basically storing an array of indices.</div><div class="ttdef"><b>Definition:</b> Vertices.h:15</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a5411849e36c65f0f841290f9aa9fb562"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5411849e36c65f0f841290f9aa9fb562">&#9670;&nbsp;</a></span>scaleInputDataPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::scaleInputDataPoint </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>scale_factor</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>When the input data points don't fill into the 1*1*1 box, scale them so that they can be filled in the unit box. Otherwise, it will be some drawing problem when doing visulization </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">scale_factor</td><td>scale all the input data point by scale_factor </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;{</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points.size(); ++i)</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  {</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[i].x /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (scale_factor);</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[i].y /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (scale_factor);</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <a class="code" href="classpcl_1_1_grid_projection.html#ace122ae8c96ea70b806f6c857d655a98">data_</a>-&gt;points[i].z /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (scale_factor);</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  }</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  max_p_ /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (scale_factor);</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#aa4f7aae2108315c64836a1b5dc986c16">min_p_</a> /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (scale_factor);</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab668b2eefe9c9136c06956ad312e6704"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab668b2eefe9c9136c06956ad312e6704">&#9670;&nbsp;</a></span>setNearestNeighborNum()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::setNearestNeighborNum </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>k</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set this only when using the k nearest neighbors search instead of finding the point union </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">k</td><td>The number of nearest neighbors we are looking for </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;      {</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        <a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a> = k;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a7661621ee4c96b46571cc5778b9b48cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7661621ee4c96b46571cc5778b9b48cf">&#9670;&nbsp;</a></span>setPaddingSize()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::setPaddingSize </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>padding_size</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>When averaging the vectors, we find the union of all the input data points within the padding area,and do a weighted average. Say if the padding size is 1, when we process cell (x,y,z), we will find union of input data points from (x-1) to (x+1), (y-1) to (y+1), (z-1) to (z+1)(in total, 27 cells). In this way, even the cells itself doesnt contain any data points, we will stil process it because there are data points in the padding area. This can help us fix holes which is smaller than the padding size. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">padding_size</td><td>The num of padding cells we want to create </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;      {</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <a class="code" href="classpcl_1_1_grid_projection.html#a6e450c217b04e02ef42278defbf7d5ea">padding_size_</a> = padding_size;</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="af8ccfe1a2c8d66ca9a126d33096d2496"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af8ccfe1a2c8d66ca9a126d33096d2496">&#9670;&nbsp;</a></span>setResolution()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::setResolution </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>resolution</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the size of the grid cell </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">resolution</td><td>the size of the grid cell </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;      {</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        <a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a> = resolution;</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="aac13ae4b11bb74d2efd2253dcca78862"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac13ae4b11bb74d2efd2253dcca78862">&#9670;&nbsp;</a></span>storeVectAndSurfacePoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::storeVectAndSurfacePoint </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index_1d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index_3d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>pt_union_indices</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_grid_projection_1_1_leaf.html">Leaf</a> &amp;&#160;</td>
          <td class="paramname"><em>cell_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Go through all the entries in the hash table and update the cellData. </p>
<p>When creating the hash table, the pt_on_surface field store the center point of the cell.After calling this function, the projection operator will project the center point onto the surface, and the pt_on_surface field will be updated using the projected point.Also the vect_at_grid_pt field will be updated using the vector at the upper left front vertex of the cell.</p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index_1d</td><td>the index of the cell after flatting it's 3d index into a 1d array </td></tr>
    <tr><td class="paramname">index_3d</td><td>the index of the cell in (x,y,z) 3d format </td></tr>
    <tr><td class="paramname">pt_union_indices</td><td>the union of input data points within the cell and pads </td></tr>
    <tr><td class="paramname">cell_data</td><td>information stored in the cell </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;{</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  <span class="comment">// Get point on grid</span></div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;  Eigen::Vector4f grid_pt (</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;      cell_data.pt_on_surface.x () - <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f,</div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;      cell_data.pt_on_surface.y () + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f,</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;      cell_data.pt_on_surface.z () + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f, 0.0f);</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160; </div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;  <span class="comment">// Save the vector and the point on the surface</span></div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a074763eb0e0911eaad45550917bd8d83">getVectorAtPoint</a> (grid_pt, pt_union_indices, <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[index_1d].vect_at_grid_pt);</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#ae80852b9daa1e3969edbcb55de2f9bfd">getProjection</a> (cell_data.pt_on_surface, pt_union_indices, <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[index_1d].pt_on_surface);</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_ae80852b9daa1e3969edbcb55de2f9bfd"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#ae80852b9daa1e3969edbcb55de2f9bfd">pcl::GridProjection::getProjection</a></div><div class="ttdeci">void getProjection(const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector4f &amp;projection)</div><div class="ttdoc">Given the coordinates of one point, project it onto the surface, return the projected point....</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:277</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a18151db726b30e36c9e7cfbb45b4a47f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18151db726b30e36c9e7cfbb45b4a47f">&#9670;&nbsp;</a></span>storeVectAndSurfacePointKNN()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointNT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_grid_projection.html">pcl::GridProjection</a>&lt; PointNT &gt;::storeVectAndSurfacePointKNN </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index_1d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3i &amp;&#160;</td>
          <td class="paramname"><em>index_3d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_grid_projection_1_1_leaf.html">Leaf</a> &amp;&#160;</td>
          <td class="paramname"><em>cell_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Go through all the entries in the hash table and update the cellData. When creating the hash table, the pt_on_surface field store the center point of the cell.After calling this function, the projection operator will project the center point onto the surface, and the pt_on_surface field will be updated using the projected point.Also the vect_at_grid_pt field will be updated using the vector at the upper left front vertex of the cell. When projecting the point and calculating the vector, using K nearest neighbors instead of using the union of input data point within the cell and pads. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">index_1d</td><td>the index of the cell after flatting it's 3d index into a 1d array </td></tr>
    <tr><td class="paramname">index_3d</td><td>the index of the cell in (x,y,z) 3d format </td></tr>
    <tr><td class="paramname">cell_data</td><td>information stored in the cell </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;{</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;  Eigen::Vector4f cell_center = cell_data.pt_on_surface;</div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;  Eigen::Vector4f grid_pt (</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;      cell_center.x () - <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f,</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;      cell_center.y () + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f,</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;      cell_center.z () + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_grid_projection.html#a3cee8f9aa36b1bb5dc4370b90e827c8e">leaf_size_</a>) / 2.0f, 0.0f);</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160; </div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;  std::vector &lt;int&gt; k_indices;</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;  k_indices.resize (<a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a>);</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;  std::vector &lt;float&gt; k_squared_distances;</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;  k_squared_distances.resize (<a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a>);</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160; </div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  PointNT pt; pt.x = grid_pt.x (); pt.y = grid_pt.y (); pt.z = grid_pt.z ();</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;  <a class="code" href="classpcl_1_1_p_c_l_surface_base.html#a28d2f448602636061ef7d716e0f6e930">tree_</a>-&gt;nearestKSearch (pt, <a class="code" href="classpcl_1_1_grid_projection.html#a62fd3015c12f93c2b6c9708c05350587">k_</a>, k_indices, k_squared_distances);</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160; </div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a060f7e37755634942614e7db6a51bc2f">getVectorAtPointKNN</a> (grid_pt, k_indices, k_squared_distances, <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[index_1d].vect_at_grid_pt);</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  <a class="code" href="classpcl_1_1_grid_projection.html#a8fcbd49493eae00ac9b08c3ad9d84470">getProjectionWithPlaneFit</a> (cell_center, k_indices, <a class="code" href="classpcl_1_1_grid_projection.html#a0fe973720c8ca47f13a76bff939ebff8">cell_hash_map_</a>[index_1d].pt_on_surface);</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a060f7e37755634942614e7db6a51bc2f"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a060f7e37755634942614e7db6a51bc2f">pcl::GridProjection::getVectorAtPointKNN</a></div><div class="ttdeci">void getVectorAtPointKNN(const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;k_indices, std::vector&lt; float &gt; &amp;k_squared_distances, Eigen::Vector3f &amp;vo)</div><div class="ttdoc">Given the location of a point, get it's vector</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:398</div></div>
<div class="ttc" id="aclasspcl_1_1_grid_projection_html_a8fcbd49493eae00ac9b08c3ad9d84470"><div class="ttname"><a href="classpcl_1_1_grid_projection.html#a8fcbd49493eae00ac9b08c3ad9d84470">pcl::GridProjection::getProjectionWithPlaneFit</a></div><div class="ttdeci">void getProjectionWithPlaneFit(const Eigen::Vector4f &amp;p, std::vector&lt; int &gt; &amp;pt_union_indices, Eigen::Vector4f &amp;projection)</div><div class="ttdoc">Given the coordinates of one point, project it onto the surface, return the projected point....</div><div class="ttdef"><b>Definition:</b> grid_projection.hpp:316</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_surface_base_html_a28d2f448602636061ef7d716e0f6e930"><div class="ttname"><a href="classpcl_1_1_p_c_l_surface_base.html#a28d2f448602636061ef7d716e0f6e930">pcl::PCLSurfaceBase::tree_</a></div><div class="ttdeci">KdTreePtr tree_</div><div class="ttdoc">A pointer to the spatial search object.</div><div class="ttdef"><b>Definition:</b> reconstruction.h:98</div></div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>surface/include/pcl/surface/<a class="el" href="grid__projection_8h_source.html">grid_projection.h</a></li>
<li>surface/include/pcl/surface/impl/<a class="el" href="grid__projection_8hpp_source.html">grid_projection.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><a class="el" href="classpcl_1_1_grid_projection.html">GridProjection</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
